【问题标题】:java.io.FileNotFoundException (The system cannot find the path specified)java.io.FileNotFoundException(系统找不到指定的路径)
【发布时间】:2012-12-06 10:56:56
【问题描述】:

当我想打开密钥库时遇到此异常

java.io.FileNotFoundException: \resources\keystore (The system cannot find the path specified)

基本上我的应用程序是这样的

src/
    client.java
    server.java
    resources/
        keystore
        truststore

还有错误代码:

System.setProperty("javax.net.ssl.keyStore","/resources/keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "redacted");

我也尝试过 ./resources/keystore、resources/keystore、\\resources\\keystore 等。

我的应用程序应该在可执行的 jar 中运行,所以请不要使用绝对路径技术。

【问题讨论】:

  • 你能贴出试图打开密钥库的代码吗?
  • 你的意思是建立连接?因为密钥库应该是通过这个 setProperty 方法打开的。我确信其余代码没有问题,因为当我使用 VM 参数 -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=redacted 加载密钥库时,一切正常。跨度>

标签: java file-io


【解决方案1】:

您可以使用它来获取当前目录路径:

Java 代码:

String currentDir = new File(".").getAbsolutePath();

或者这个:

Java 代码:

String currentDir = System.getProperty("user.dir");

【讨论】:

  • 他不能使用绝对路径。否则,您可以简单地使用this.getClass().getResource(".") 来获取此类的绝对路径作为 URL。
  • 正如我所说,我不能使用绝对路径技术,因为它在 jar 文件中不起作用。
【解决方案2】:

如果你可以把你的资源放在CLASS_PATH中,你可以使用

Thread.currentThread().getContextclassLoader().getResource(keystore)

【讨论】:

  • 其实我希望人们不用做任何事情直接启动它。这就是为什么我也在代码中执行 setProperty 而不是提供 VM 参数。
【解决方案3】:

关于不同的斜线:使用File.separator而不是/,那么它应该在"resources" + File.separator + "keystore"中(未测试)。

【讨论】:

  • 不幸的是它不起作用它打印同样的东西。 java.io.FileNotFoundException: \resources\keystore
  • 您使用的是什么环境(IDE)?打印出这个相对路径产生的绝对路径(类似于新的File("resources/keystore").toString())并检查它指向的一些文件资源管理器。我认为问题可能是路径是相对于已编译的 .class 文件创建的,而不是相对于 .java 文件。
猜你喜欢
  • 2014-01-11
  • 2014-12-19
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 2012-05-28
  • 2017-11-21
  • 1970-01-01
相关资源
最近更新 更多