【问题标题】:FileReader csv : FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressedFileReader csv : FileNotFoundException: 该文件不能作为文件描述符打开;它可能被压缩了
【发布时间】:2012-07-26 21:05:24
【问题描述】:

我想读取一个 csv 文件。为此,我找到了我这样使用的 CSVReader:

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:这个文件不能作为文件描述符打开;它可能被压缩了。

我的文件位于 assets 文件夹中。

我已经看过这个帖子了:java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed 它对我一点帮助都没有。

所以,我必须做错什么,但是怎么办? 我应该把我的文件放在另一个文件夹中,然后用其他方法打开吗?

【问题讨论】:

  • 您是否尝试过参考帖子中提到的建议(例如手动将文件添加到 apk 中的 assets 文件夹)?此外,发布异常的完整堆栈跟踪也不会受到影响。
  • 你说得对,这种方式效果很好。顺便说一句,因为我们正在谈论压缩......我有大约一百个 xml 文件(150MB)被压缩,因为我的 apk 文件只有 4.5MB。由于它们是压缩的,我猜应用程序需要更多时间来访问这些文件中的数据,对吗?然后,如果我把这些文件放在 SD 卡上读取会不会更快?
  • 这取决于您的应用程序访问文件的方式。我可以想象会有某种缓存,所以不能保证会有很大的不同。我想了解的唯一方法就是尝试一下。

标签: android csv filenotfoundexception


【解决方案1】:

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"

如果您对构建过程有足够的控制权,则可以使用 带有 zip 或 aapt 的“-0”标志以添加资产。

-0 指定一个附加扩展名,此类文件不会 被压缩存储在 .apk 中。空字符串表示不 完全压缩任何文件。

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

【讨论】:

  • 你能给我更多的细节吗?当我使用“-0”标志时,我得到了错误命令-0。命令是:./aapt -0 db
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多