2012-07-26 29 views
0

我想读取一个csv文件。对于这一点,我发现CSVReader我用这样的:FileReader csv:FileNotFoundException:该文件不能作为文件描述符打开;它可能是压缩的

List myEntries = null; 
    try { 
     AssetFileDescriptor descriptor = getAssets().openFd("file.csv"); 
     CSVReader csvReader = new CSVReader(new FileReader(descriptor.getFileDescriptor()), ',', '"'); 
     myEntries = csvReader.readAll(); 
     csvReader.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

但我得到这个错误: FileNotFoundException异常:该文件无法打开的文件描述符;它可能是压缩的。

我的文件位于资产文件夹中。

我已经看到此线程:java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed 它根本没有帮助我。

所以,我必须做错什么,但是什么? 我应该把我的文件放在另一个文件夹上并用另一种方法打开它吗?

+0

您是否尝试过在引用帖子中提到的建议(例如,手动将文件添加到apk文件夹中)?此外,发布异常的完整堆栈跟踪不会受到影响。 – comodoro 2012-07-26 21:31:47

+0

你说得对,它的效果很好。顺便说一句,因为我们正在谈论压缩......我有大约一百个xml文件(150MB),这些文件被压缩,因为我的apk文件只有4.5MB。 由于它们是压缩的,我猜应用程序需要更多时间来访问这些文件中的数据,对吗? 然后,如果将这些文件放在SD卡上,读取速度会更快吗? – lost17 2012-07-27 00:18:33

+0

这取决于您的应用程序访问文件的方式。我可以想象有什么缓存,所以不能保证有很大的不同。我想知道的唯一方法就是尝试一下。 – comodoro 2012-07-27 08:14:03

回答

4

的Android压缩所有资产,除了以下几种类型:

".jpg", ".jpeg", ".png", ".gif", 
".wav", ".mp2", ".mp3", ".ogg", ".aac", 
".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", 
".rtttl", ".imy", ".xmf", ".mp4", ".m4a", 
".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", 
".amr", ".awb", ".wma", ".wmv" 

如果在构建过程足够的控制,你可以使用 “-0”拉链或AAPT标志添加资产。

-0指定一个额外的扩展名,这些文件不会被 压缩存储在.apk中。一个空字符串意味着不要压缩任何文件。

如果您有机会使用CSVReader执行此操作,请将您的csv文件存放在资产文件夹以外的其他位置,例如sdcard。

+0

你能给我更多的细节吗?当我使用“-0”标志时,我得到了错误命令-0。该命令是:./aapt -0 db – EastBK 2013-11-29 18:41:32

相关问题