如何在jar文件中使用文件?

时间:2014-11-19 16:23:00

标签: java jar

我在jar主题中看到了有关访问资源的其他问题,但我的问题有点不同。 我需要在我的代码中使用.jks文件为我正在编写的客户端访问web服务。这个代码在我的系统中完美运行,即使我将它打包为jar但是当我将jar发送给另一个人时它会收到SSL错误。我知道它在我的代码中硬编码时无法访问文件。即使我在jar中添加文件也是如此。

任何人都可以告诉我如何在jar中访问此文件。我不需要在这里使用文件阅读器或缓冲阅读器,因为我只需要提供文件的路径。

提前致谢

        SslConfigurator sslConfig = SslConfigurator.newInstance()
                .trustStoreFile("AAAWSKeyStore.jks")
                .trustStorePassword("password")
                .keyStoreFile("AAAWSKeyStore.jks")
                .keyPassword("password")
                .securityProtocol("TLS");

此处抛出的错误是

    jjava.lang.IllegalStateException: Cannot find key store file ".\AAAWSKeyStore.jks
   ".
    at org.glassfish.jersey.SslConfigurator.createSSLContext(SslConfigurator
 .java:679)
    at GuiAAAWS.sendPost(GuiAAAWS.java:220)
    at GuiAAAWS.OkActionPerformed(GuiAAAWS.java:198)
    at GuiAAAWS.access$2(GuiAAAWS.java:193)
    at GuiAAAWS$3.actionPerformed(GuiAAAWS.java:88)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener

1 个答案:

答案 0 :(得分:2)

它并不像给出文件的路径那么简单,因为当它被包装在jar中时它不是真正的文件。但是,您可以向SslConfigurator提供KeyStore对象,这比指定路径更灵活,因为它可以从任何输入源初始化,包括jar中的资源:

KeyStore keyStore = KeyStore.getInstance("jks");
try (InputStream in = YourClassName.class.getResourceAsStream("AAAWSKeyStore.jks")) {
    keyStore.load(in, "password".toCharArray());
}

SslConfigurator sslConfig = SslConfigurator.newInstance()
    .trustStore(keyStore)
    .keyStore(keyStore)
    .securityProtocol("TLS");