在Android中从assets文件夹读取文件时遇到问题

3

这个问题涉及到 这个。因为这是一个具体的问题,所以我将它单独放在这里。我尝试创建一个名为"foo.txt"的文本文件,并通过以下方式将其读入我的Activity:

File file = new File("/assets/foo.txt");
if ( file.exists() ){
    txtView.setText("Exists");
}
else{
    txtView.setText("Does not exist");
}

"

“foo.txt”文件位于我的资源文件夹中,我已经确认它在操作系统中存在。然而,从以上代码中,我的TextView始终显示文本“不存在”。我尝试去

"
File file = new File("/assets/foo.txt");
Scanner in = new Scanner(file);

同样的操作,但这会产生以下内联错误:“未处理的异常类型FileNotFoundException”。Eclipse然后建议使用try / catch,它删除了错误,但仍无法正常工作。
我还尝试将我的资产文件夹设置为“用作源文件夹”,但这没有任何区别。我也尝试使用原始文件夹,但是好几个人建议不要使用。我已经没有任何选择了,真的需要帮助解决这个问题。应该很容易......
另外一种尝试是转到
AssetManager assetManager = getResources().getAssets();
InputStream is = assetManager.open("assets/foo.txt");

但是这会在第二行产生内联错误:"未处理的异常类型 IOException"。

3个回答

14

我赞同CommonsWare的观点(那是比较安全的方式 :) ),不过这应该是:

AssetManager assetManager = getResources().getAssets();
InputStream inputStream = null;

    try {
        inputStream = assetManager.open("foo.txt");
            if ( inputStream != null)
                Log.d(TAG, "It worked!");
        } catch (IOException e) {
            e.printStackTrace();
        }

不要使用InputStream is = assetManager.open("assets/foo.txt");


当只使用“foo.txt”时,仍会产生“未处理的异常类型IOException”。我从Eclipse获得了用try/catch包围它的选项,但是它没有任何区别:( - Krøllebølle
1
如果您使用this.getAssets()代替getResources().getAssets(),是否有任何更改? - MByD
@Krøllebølle - 另外,请清理并重新构建项目。 - MByD
好的,我清理了项目,突然就可以工作了,不确定是清理起了作用还是睡了一晚上。但是必须使用try/catch语句,就像@imrankhan描述的那样(Eclipse要求这样做)。谢谢!\o/ - Krøllebølle
我尝试以以下方式读取“.docx”文件。结果是编码格式。我该如何解决这个问题? - kavie

3

在运行时,您不应该使用File来访问assets/。相反,您应该使用AssetManager来访问assets/,您可以通过getResources().getAssets()获取它。


我也尝试过了,抱歉没有提到。我已经更新了我的帖子。 - Krøllebølle
@Krøllebølle:看另一个答案--你需要在路径中把 assets/ 去掉。 - CommonsWare

2

试试这个:

    private AssetManager am;
     am=getAssets();

     InputStream inputStream = null ;  
        try   
        {  
            inputStream = am.open("read.txt");  
        }   
        catch (IOException e) {}  

你能把完整的文件路径复制给我吗,例如你的项目名称/assets/文件名? - ρяσѕρєя K
谢谢,按照 @BinyaminSharet 建议进行了清理后,它正常工作了。Eclipse 要求在 inputStream = am.open("foo.txt"); 周围加上 try/catch,现在它可以正常工作了。谢谢! - Krøllebølle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接