【问题标题】:FileNotFoundException on .crt file.crt 文件上的 FileNotFoundException
【发布时间】:2017-03-23 01:30:05
【问题描述】:

我正在尝试加载一个文件,但即使该文件存在,我也会收到 FileNotFoundException。我尝试过绝对路径(C:/Users/cdeck_000/AndroidStudioProjects/ProjectCaligula_Final/cert/cert.crt)和相对路径(cert/cert.crt)假设Android从项目级别开始。当我使用相对路径运行它并询问文件绝对路径时,我得到了这个:

路径:/cert/cert.crt

代码与项目结构一起在下面。

File file = new File("cert/cert.crt");
boolean i = file.exists();  //false
boolean r = file.canRead(); //false
String path = file.getAbsolutePath(); //cert/cert.crt
String pathForApp = new File(".").getAbsolutePath(); //returns "/."
InputStream caInput = new BufferedInputStream(new FileInputStream(file)); //error

如果我对 Android 的绝对/相对路径的了解有误,谁能插话让我知道,或者就如何解决这个问题给我建议?我已经认为权限是问题,但我提高了文件权限(相当于 chmod 777)并且它没有改变任何东西。

【问题讨论】:

  • 您的 IDE 通常会从 buildbuild/classes 目录执行您的应用程序。因此,您的证书文件应该放在src 目录中,以便复制到类目录中。
  • @EJP 谢谢.. 我将文件移到 src 所以现在路径是 ../src/cert.crt .. 我现在将文件更改为从“cert.crt”加载但它仍然没找到。
  • 也许我错了,您的文件驻留在您机器的硬盘上,当您运行应用程序时,您的应用程序无法访问您机器的硬盘。也许是因为File file = new File("cert/cert.crt");,您将路径作为字符串获取,但在模拟器/设备上运行应用程序时无法访问。尝试通过将文件放入 res/raw 或 assets 文件夹来读取文件。
  • 如果你想让它在cert/cert.crt你需要把它放到src/cert/crt。但实际上这使它成为一种资源,而不是文件,所以你应该使用Class.getResourceAsStream("/cert/cert.crt"),而不是new FileInputStream().
  • @EJP 就是这样!哇,这么简单,没想到。谢谢您的帮助。回答问题,我会将其标记为正确。

标签: java android filenotfoundexception


【解决方案1】:

你应该把它放入src/cert/cert.crt,这使它成为一个资源,而不是一个文件,所以你应该使用Class.getResourceAsStream("/cert/cert.crt"),而不是new FileInputStream()

【讨论】:

    【解决方案2】:

    我遇到的问题与我使用以下方式解决我的问题相同

    1. 创建assets 文件夹
    2. 将文件复制到assets文件夹中
    3. assets读取文件

    使用下面的代码从assets文件夹中读取

    BufferedReader reader = null;
            try {
                reader = new BufferedReader(
                        new InputStreamReader(getAssets().open("cert.crt")));
    
                // do reading, usually loop until end of file reading
                String mLine;
                while ((mLine = reader.readLine()) != null) {
                    //process line
    
                }
            } catch (IOException e) {
                //log the exception
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        //log the exception
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2020-11-21
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多