java.io.FileNotFoundException(系统找不到指定的路径)

java.io.FileNotFoundException(系统找不到指定的路径),java,file-io,Java,File Io,当我想打开密钥库时,会出现此异常 java.io.FileNotFoundException: \resources\keystore (The system cannot find the path specified) 基本上我的申请是 src/ client.java server.java resources/ keystore truststore 以及错误代码: System.setProperty("javax.net.s

当我想打开密钥库时,会出现此异常

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中工作,因此请不要使用绝对路径技术。

您可以使用此方法获取当前目录路径:

Java代码:


String currentDir=新文件(“.”).getAbsolutePath()

或者这个:

Java代码:


String currentDir=System.getProperty(“user.dir”)

关于不同的斜杠:使用
文件.separator
而不是
/
,那么它应该在
资源+File.separator+“keystore”
(未测试)。

如果可以将资源放在类路径中,可以使用

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

他不能使用绝对路径。否则,您只需执行
this.getClass().getResource(“.”
即可将此类的绝对路径作为URL。正如我所说的,我不能使用绝对路径技术,因为它在jar文件中不起作用。不幸的是,它不起作用,它会打印相同的内容。java.io.FileNotFoundException:\resources\keystreWhat environment(IDE)正在使用?打印出这个相对路径(比如new
File(“resources/keystore”).toString()
)生成的绝对路径,并在它指向的某个文件资源管理器中进行检查。我认为问题可能在于路径是相对于编译的
.class
文件创建的,而不是相对于
.java
文件创建的。实际上,我希望人们不做任何事情就直接启动它。这就是为什么我还在代码中执行setProperty而不是提供VM参数的原因。您能发布尝试打开密钥库的代码吗?您的意思是建立连接吗?因为密钥库应该由这个setProperty方法打开。我确信代码的其余部分没有问题,因为当我用VM参数-Djavax.net.ssl.keystore=keystore-Djavax.net.ssl.keyStorePassword=redact加载密钥库时,一切都正常工作。