关于Android应用程序中的csv:FileNotFoundException:找不到复制文件的路径

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通过file.getAbsolutePath();告诉我它是" / "),当程序运行时,总会达到目的抛出FileNotFoundException,我有点沮丧,因为我已经有2天的时间解决此问题了。

如果有人可以帮助我弄清楚应该如何从正确的目录中获取文件,这将有很多帮助,我可以进一步讲解我必须完成的代码。

在此先感谢您!!!!

编辑
我找到了打开文件的解决方案:

  • 我使用了2个文件变量:一个获取外部存储目录的路由(请参见以下链接中的第一个答案),另一个被声明为新文件,如代码中的以下几行:
    route = Environment.getExternalStorageDirectory();
    file = new File(route,"Motors.csv");

  • 稍后,我再次使用了我发现的CSV阅读器类,其中第一个参数来自FileReader类型(对不起,@ Rajesh,但是我不能使用您的替代方法,因为您从AssetManager转到CSV阅读器类,然后我不得不更改整个类,这根本解决了我的问题)。

现在我根本没有例外!


Android中有多种存储选项。文件可以存储在内部和外部存储中。如果CSV文件是静态资源,则可以考虑将该文件捆绑到项目的" assets "文件夹中。

如果您使用" assets "路由,则以下代码段可以为您提供CSVReader

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 "文件夹中。