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

Posted

技术标签:

【中文标题】从资产目录读取文件抛出 FileNotFoundException【英文标题】:Reading file from assets directory throws FileNotFoundException 【发布时间】:2011-07-02 11:22:37 【问题描述】:

我正在尝试读取一个包含一堆单词的文本文件,这些单词要用于我正在编写的文字游戏。此列表存储在 assets 目录中,是一个 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)

谢谢大家!

【问题讨论】:

【参考方案1】:

在 Maven 上,Assets 文件夹需要位于 projectName/ 内,而不是像其他示例中所建议的那样位于 projectName/src/main 内。

来源:

http://jayway.github.io/maven-android-plugin/generate-sources-mojo.html

【讨论】:

【参考方案2】:

检查文件是否正确打包在 .apk 文件内的 assets 文件夹中。 (可以以 zip 文件的形式浏览。如有必要,请重命名。)

【讨论】:

有趣的是,当我从 Eclipse 导出文件时,该文件就在那里,但是当我从手机(从数据/应用程序)中取出文件时,整个资产目录是 MIA。我如何获得它来创建该目录? 知道了!我必须右键单击 Eclipse 中的资产目录,然后选择 Build Path -> Use as Source Folder。现在 Eclipse 在打包 apk 时构建它。那是个好建议。谢谢! 实际上,我只是稍微快速地做出了“伟大的评论”标记......如果我将“资产”标记为源文件夹,它不起作用 - 找不到文件。如果我让它成为(标准),它工作得很好=) @YogeshMaheshwari - 什么对你不起作用?也许如果您提出问题并发布代码,有人可以帮助您使其正常工作。 @TedHopp - 抱歉声明不完整。我确实尝试解压缩 .apk 并且资产文件夹在那里但仍然收到 FileNotFoundException,代码是一样的,我也尝试在源文件夹中添加资产文件夹甚至删除它的清洁项目,但似乎没有任何效果

以上是关于从资产目录读取文件抛出 FileNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

从 Android 上的资产中读取音频文件

如何在 Angular-4 资产中读取 csv 文件

从资产中读取文件

Flutter - 从资产中读取文本文件

您如何解决: FileNotFoundError: [Errno 2] 没有这样的文件或目录:

为啥 InputStreamReader 从 jar 读取时会抛出 NPE?