Android从asset / raw获取文件

时间:2017-08-27 19:39:03

标签: android

使用以下代码我正在尝试访问存储在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();
    }
}

enter image description here

5 个答案:

答案 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")

上下文可以是thisgetActivity()或基本上任何其他上下文

重要的是要在文件名之前用/

包含文件夹

答案 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");