0

大家下午好,

我在使用 CSV 文件时遇到问题,我想用它来填充 Android 中的动态表。

我将文件放在模拟器的“数据”文件夹中,并执行以下声明来创建文件变量:

file = new File("/data/Motors.csv");

我使用了在此页面的另一个线程上发布的 CSVReader 类(链接到类),并且还声明了以下行来进行解析:

readerCSV = new CSVReader(new FileReader(file),';','"',0);

在最后一行中,能够创建变量的程序员必须将 Reader(或 FileReader,它没有区别)、分隔符字符、引号字符和行数作为参数发送CSV 阅读器必须跳过。

问题来了,无论在哪个目录中(甚至在根目录中,Java 通过file.getAbsolutePath();方法告诉我它是“/”)它总是会在程序抛出FileNotFoundException时到达点,我有点沮丧因为我已经有 2 天的时间来解决这个问题了。

如果有人可以帮助我了解我应该做些什么来从正确的目录中获取文件......这将是一个很大的帮助,我可以进一步完成我必须完成的代码。

提前谢谢了!!!!

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

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

  • 后来我再次使用了我找到的 CSV 阅读器类,其中第一个参数来自FileReader类型(对不起@Rajesh,但我无法使用你的替代方案,因为你将FileDescription参数从CSV 阅读器类传递AssetManager给了 CSV 阅读器类,然后我不得不改变整个班级,这对我的问题根本没有帮助)。

现在我根本没有得到例外!

4

1 回答 1

2

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

如果您使用的是“资产”路线,则以下代码段可以为您提供CSVReader.

AssetManager am = getAssets();
AssetFileDescriptor afd = am.openFd ("Motors.csv");
FileDescriptor fd = afd.getFileDescriptor();
readerCSV = new CSVReader(fd, ';','"',0);

上面的代码片段不执行错误/异常处理,请记住要注意这一点。您需要将 Motors.csv 文件复制到项目中的“assets”文件夹中。

于 2012-09-12T14:38:34.630 回答