FileNotFoundException in an Android app: can't find the route to copy the file
大家下午好,
我在这里遇到一个CSV文件问题,我想用它来填充Android中的动态表格。
我将文件放在模拟器的" data "文件夹中,并执行以下声明来创建文件变量:
1 | file = new File("/data/Motors.csv"); |
我使用了此页面上另一个线程上发布的CSVReader类(链接到该类),并且还声明了以下行来进行解析:
1 | readerCSV = new CSVReader(new FileReader(file),';','"',0); |
在最后一行,要能够创建变量的程序员必须发送一个Reader(或FileReader,没有区别),分隔符char,引号char和数字作为参数。 CSV阅读器必须跳过多少行。
问题来了,无论在哪个目录中(甚至不在根目录中,哪个Java通过
如果有人可以帮助我弄清楚应该如何从正确的目录中获取文件,这将有很多帮助,我可以进一步讲解我必须完成的代码。
在此先感谢您!!!!
编辑
我找到了打开文件的解决方案:
-
我使用了2个文件变量:一个获取外部存储目录的路由(请参见以下链接中的第一个答案),另一个被声明为新文件,如代码中的以下几行:
route = Environment.getExternalStorageDirectory();
file = new File(route,"Motors.csv"); -
稍后,我再次使用了我发现的CSV阅读器类,其中第一个参数来自
FileReader 类型(对不起,@ Rajesh,但是我不能使用您的替代方法,因为您从AssetManager 转到CSV阅读器类,然后我不得不更改整个类,这根本解决了我的问题)。
现在我根本没有例外!
Android中有多种存储选项。文件可以存储在内部和外部存储中。如果CSV文件是静态资源,则可以考虑将该文件捆绑到项目的" assets "文件夹中。
如果您使用" assets "路由,则以下代码段可以为您提供
1 2 3 4 | AssetManager am = getAssets(); AssetFileDescriptor afd = am.openFd ("Motors.csv"); FileDescriptor fd = afd.getFileDescriptor(); readerCSV = new CSVReader(fd, ';','"',0); |
上面的代码段不执行错误/异常处理,请记住要小心。您需要将Motors.csv文件复制到项目内的" assets "文件夹中。