从资产目录读取文件抛出FileNotFoundException异常

18

我试图读取一个文本文件,其中包含很多单词,我想将这些单词用于我正在编写的一个单词游戏。这个列表存储在资产目录中,是一个txt文件。但是,每当我尝试打开它时,就会抛出异常。

List<String>wordList = new ArrayList<String>();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new InputStreamReader(getAssets().open("wordlist.txt"))); //throwing a FileNotFoundException?
        String word;
        while((word=br.readLine()) != null)
        wordList.add(word); //break txt file into different words, add to wordList
    }
        catch(IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                br.close(); //stop reading
            }
            catch(IOException ex) {
                ex.printStackTrace();
            }
        }
        String[]words = new String[wordList.size()];
        wordList.toArray(words); //make array of wordList

        for(int i=0;i<words.length; i++)
            Log.i("Brian", words[i]); //print out words in array
}

以下是错误日志,希望能有所帮助:

02-22 20:49:47.646: WARN/System.err(2351): java.io.FileNotFoundException: wordlist.txt
02-22 20:49:47.646: WARN/System.err(2351):     at android.content.res.AssetManager.openAsset(Native Method)
02-22 20:49:47.746: WARN/System.err(2351):     at android.content.res.AssetManager.open(AssetManager.java:299)
02-22 20:49:47.746: WARN/System.err(2351):     at android.content.res.AssetManager.open(AssetManager.java:273)
02-22 20:49:47.756: WARN/System.err(2351):     at com.bic.anagram.GameActivity.onCreate(GameActivity.java:40)
02-22 20:49:47.756: WARN/System.err(2351):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-22 20:49:47.756: WARN/System.err(2351):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2521)
02-22 20:49:47.756: WARN/System.err(2351):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2574)
02-22 20:49:47.766: WARN/System.err(2351):     at android.app.ActivityThread.access$2400(ActivityThread.java:121)
02-22 20:49:47.766: WARN/System.err(2351):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1925)
02-22 20:49:47.766: WARN/System.err(2351):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 20:49:47.776: WARN/System.err(2351):     at android.os.Looper.loop(Looper.java:136)
02-22 20:49:47.776: WARN/System.err(2351):     at android.app.ActivityThread.main(ActivityThread.java:4425)
02-22 20:49:47.776: WARN/System.err(2351):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 20:49:47.776: WARN/System.err(2351):     at java.lang.reflect.Method.invoke(Method.java:521)
02-22 20:49:47.776: WARN/System.err(2351):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-22 20:49:47.776: WARN/System.err(2351):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-22 20:49:47.776: WARN/System.err(2351):     at dalvik.system.NativeStart.main(Native Method)
02-22 20:49:47.776: WARN/dalvikvm(2351): threadid=3: thread exiting with uncaught exception (group=0x4001e280)

谢谢大家!

2个回答

19

检查文件是否已正确打包到.apk文件内的assets文件夹中。 (可以将其作为zip文件浏览。如有必要,请重命名以便查看内部内容。)


有趣的是,在我从Eclipse进行导出时,文件确实存在,但当我从手机中提取该文件(从data/app目录下)时,整个assets目录都不见了。我该如何让它创建那个目录? - strange quark
17
明白了!我需要在Eclipse中右键单击“资源”目录,然后选择“构建路径” -> “使用作为源文件夹”。现在Eclipse在打包apk时会自动构建它。这是一个好建议。谢谢! - strange quark
其实,我打上那个“好评”的标记有点太仓促了...如果我将“资产”标记为源文件夹,它就无法正常工作——找不到文件。如果我让它保持默认状态,它就可以正常工作=) - Ted
1
@YogeshMaheshwari - 你遇到了什么问题?也许如果你提出一个问题并发布你的代码,有人可以帮助你解决它。 - Ted Hopp
@TedHopp - 对不起,我的陈述不完整。我尝试解压.apk文件,资产文件夹在那里,但仍然出现FileNotFoundException异常,代码完全相同,我还尝试将资产文件夹添加到源文件夹中,甚至删除它并清理项目,但似乎没有任何作用。 - Yogesh Maheshwari
@YogeshMaheshwari - 如果资产文件夹(以及您想要的文件)已打包在.apk文件中,则您的代码存在问题。请再次将您的代码作为单独的问题发布,您应该能够得到解决方案。将资产文件夹添加为源文件夹是错误的--这只是一些人尝试的方法,以便资产文件夹可以打包在.apk中;这似乎不是您的问题,并且在任何情况下都不应该是必需的。 - Ted Hopp

2

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