使用AssetManager打开文本文件并将其分配给InputStream

时间:2019-03-02 17:10:01

标签: java android inputstream android-assetmanager

基本上,我认为这可能是一个项目结构问题,因为我不确定在哪里放置文本文件,我已经建立了目录资产,并在其中放置了一个名为texts的文件夹,并在其中放置了myawesometext.txt。

我得到的错误是被称为找不到文件的异常。

我认为这可能与权限有关,但找不到与其相关的权限,因为它不是外部存储。

我的问题是我是否有文件并且正在运行该应用程序,应在哪里读取结构中的资产文件夹,我已经仔细检查了拼写(没有拼写错误),只是发现了我的异常。

班级:

public class AssetsTest extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView textView = new TextView(this);
    setContentView(textView);
    AssetManager assetManager = getAssets();
    InputStream inputStream = null;
    try {
        inputStream = assetManager.open("texts/myawesometext");
        String text = loadTextFile(inputStream);
        textView.setText(text);
    } catch (IOException e) { textView.setText("Couldn't load file");
    } finally {
        if (inputStream != null)
            try { inputStream.close();
            } catch (IOException e) { textView.setText("Couldn't close file");
            } }
}
    public String loadTextFile(InputStream inputStream) throws IOException { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); byte[] bytes = new byte[4096];
        int len = 0;
        while ((len = inputStream.read(bytes)) > 0) byteStream.write(bytes, 0, len);
        return new String(byteStream.toByteArray(), "UTF8"); }
}

location of file

在此先感谢... 本

1 个答案:

答案 0 :(得分:1)

您的资产文件夹位置不正确,您的代码也不正确。请按照以下步骤操作。

首先,将当前的assets文件夹移至src/main

screenshot

第二,从以下代码中更改此行

inputStream = assetManager.open("texts/myawesometext");

inputStream = assetManager.open("texts/myawesometext.txt");