public void loadFile(int level){
try {
//Create new file
levelFile = new File("assets/levels.txt");
fis = new FileInputStream(levelFile);
isr = new InputStreamReader(fis);
reader = new BufferedReader(isr);
//Code to read the file goes here
但是,使用此代码,我不断收到上述错误(java.io.FileNotFoundException
)。
该文件肯定存在于我的Assets文件夹中,并且名称正确。我在这里找到了几个类似的问题并尝试了各种各样的事情,包括刷新项目,清理项目,使用"levels.txt"
而不是"assets/levels.txt"
,但我一直收到此错误。
任何想法为什么?
答案 0 :(得分:7)
因为您在打包之外处理,getResource()
将是您问题的最佳解决方案:
URL url = getClass().getResource("/assets/levels.txt");
File f = new File(url.toURI());
//....
或者您可以使用getResourceAsStream()
方法直接获取输入流:
InputStream is= getClass().getResourceAsStream("/assets/levels.txt");
isr = new InputStreamReader(is);
最好,因为您不必使用 FileInputStream 。
请注意URISyntaxException
必须被FileNotFoundException
捕获或声明被抛出。
答案 1 :(得分:5)
在Android项目中,阅读资产文件内容的正确方法是使用AssetManager
。资产文件是您放在Android项目的assets/
文件夹中的文件。这在Android文档的Accessing Resources页面的侧栏中有简要提及。
特别是,您可以打开文件assets/levels.txt
并创建BufferedReader
,如下所示:
InputStream stream = context.getAssets().open("levels.txt");
BufferedReader reader = new BufferedReader(
new InputStreamReader(stream));
请注意,open
来电的参数只是levels.txt
,而不是assets/levels.txt
。
有关详细信息,请参阅full docs of AssetManager。