使用以下代码我正在尝试访问存储在asset/raw
文件夹中的文件,但我得到null
和
E/ERR: file:/android_asset/raw/default_book.txt (No such file or directory)
错误,我的代码是:
private void implementingDefaultBook() {
String filePath = Uri.parse("file:///android_asset/raw/default_book.txt").toString();
File file = new File(filePath);
try {
FileInputStream stream = new FileInputStream(file);
} catch (Exception e) {
e.printStackTrace();
Log.e("ERR ", e.getMessage());
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
答案 0 :(得分:8)
将您的文本文件放在Android项目下的/ assets目录中,并按如下方式使用AssetManager类来访问它。
AssetManager am = context.getAssets();
InputStream is = am.open("default_book.txt");
或者您也可以将文件放在/ res / raw目录中,可以通过id访问文件,如下所示
InputStream is =
context.getResources().openRawResource(R.raw.default_book);
答案 1 :(得分:4)
资产和资源是开发计算机上的文件。它们不是设备上的文件。
对于资产,请使用open()
上的AssetManager
获取资产上的InputStream
。
此外,FWIW:
Uri.parse("file:///android_asset/raw/default_book.txt").toString()
毫无意义,因为它为您提供了与您开始时相同的字符串
file:///android_asset/
仅适用于WebView
答案 2 :(得分:2)
由于实际问题尚未得到足够的回答,我们开始
InputStream is = context.getAssets().openFd("raw/"+"filename.txt")
上下文可以是this
或getActivity()
或基本上任何其他上下文
重要的是要在文件名之前用/
答案 3 :(得分:2)
在Kotlin中,我们可以实现as-
val string = requireContext().assets.open("default_book.txt").bufferedReader().use {
it.readText()
}
答案 4 :(得分:0)
InputStream is = getAssets().open("default_book.txt");