【问题标题】:FileNotFoundException in an Android app: can't find the route to copy the fileAndroid 应用程序中的 FileNotFoundException:找不到复制文件的路径
【发布时间】:2014-07-28 07:28:33
【问题描述】:

大家下午好,

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

我将文件放在模拟器的“data”文件夹中,然后我做了以下声明来创建我的文件变量:

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

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

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

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

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

如果有人可以帮助我了解我应该如何从正确的目录中获取文件...这会很有帮助,我可以进一步完成我必须完成的代码.

非常感谢!!!!

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

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

  • 后来我再次使用了我找到的 CSV 阅读器类,其中第一个参数来自 FileReader 类型(抱歉@Rajesh,但我无法使用您的替代方法,因为您传递了 FileDescription 参数从AssetManager 到 CSV 阅读器类,然后我不得不更改整个类,这对我的问题没有任何帮助)。

现在我根本没有得到异常!

【问题讨论】:

    标签: android csv filenotfoundexception


    【解决方案1】:

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

    如果你使用“assets”路由,下面的代码段可以给你一个CSVReader

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

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

    【讨论】:

    • getAssets()Context 的方法,Activity 是其子类。请阅读文档以获取更多信息。您必须从 Activity 中调用该方法,或者将上下文的引用传递给调用它的方法(您可以将其称为 context.getAssets() )。
    • 我只是看到我不能使用我正在做的事情,我必须从头开始。我试图在一个与活动类没有任何关系的类中使用getAssets()。感谢 getAssets() 提示。我会告诉你我所取得的一切。我使用了 SharedPreferences,但我对 CSV 的想法是用户能够在不使用应用程序的情况下添加和修改列表的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多