Reputation: 31161
I'm doing:
FileReader fin = new FileReader("file:///android_asset/myFile.txt");
in an Android project and many variations. At runtime I get a file not found exception. The file is present and correct in the assets folder, so my path must be wrong.
What is the absolute path I need here?
Upvotes: 25
Views: 86090
Reputation: 3541
InputStream is = getResources().getAssets().open("terms.txt");
String textfile = convertStreamToString(is);
public static String convertStreamToString(InputStream is)
throws IOException {
Writer writer = new StringWriter();
char[] buffer = new char[2048];
try {
Reader reader = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
String text = writer.toString();
return text;
}
Upvotes: 19
Reputation: 24061
Its not reading it because all assets in assets folder are compressed, try changing its extension to .mp3 then read it in, that should stop it from being compressed.
Upvotes: 3
Reputation: 131
I found that if you are using an IDE like Eclipse you may need to do a clean -- or delete the API in the bin directory. It seems that the assets isn't getting updated when you do a build.
Upvotes: 2
Reputation: 31
AssetManager am = context.getAssets();
InputStream fs = am.open("myFile.txt");
Upvotes: 1
Reputation: 134664
AssetFileDescriptor descriptor = getAssets().openFd("myfile.txt");
FileReader reader = new FileReader(descriptor.getFileDescriptor());
Try using the above with FileDescriptors. Seems to be the most foolproof way I've found to gather asset paths.
Upvotes: 47
Reputation: 10479
Can you use something like
try {
BufferedReader br = new BufferedReader(new InputStreamReader(context.getAssets().open("fileName.txt")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Upvotes: 3