从资产目录读取文件抛出 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的主要内容,如果未能解决你的问题,请参考以下文章