首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileNotFound与.jar和JSSE

FileNotFound与.jar和JSSE
EN

Stack Overflow用户
提问于 2015-04-02 03:42:07
回答 2查看 284关注 0票数 0

我使用的是JSSE,有以下代码:

代码语言:javascript
复制
private static void setupServerKeystore() throws GeneralSecurityException, IOException {
        mServerKeyStore = KeyStore.getInstance( "JKS" );
        mServerKeyStore.load(new FileInputStream(iComputer.class.getClassLoader().getResource("res/server.public").getPath()), 
                            "pswd".toCharArray());
}


private static void setupClientKeyStore() throws GeneralSecurityException, IOException {
            mClientKeyStore = KeyStore.getInstance( "JKS" );
            mClientKeyStore.load(new FileInputStream(iComputer.class.getClassLoader().getResource("res/client.private").getPath()),
                                   mPassphrase.toCharArray());
}

这是我的文件夹结构:

代码语言:javascript
复制
- iComputer
   - src
        - com
            - ...
        - res
            - server.public
            - client.private

这两个URL都在Eclipse中工作,客户端成功地执行握手。但是,当我将其导出为.jar文件时,会得到一个FileNotFoundException:

代码语言:javascript
复制
> java.io.FileNotFoundException:
> file:/Users/Zack/Downloads/iComputer.jar!/res/server.public (No
> such file or directory)

几个小时以来,我一直在设法弄清楚这件事,却没有运气。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-02 12:52:00

好的,下面是我为解决这个问题所做的工作(感谢peeskillet提出了解决方案)。我考虑了使用getResourceAsStream().的选择--这在Eclipse中运行得很好,但问题是在导出和运行jar文件时遇到了一个错误,"error error: sun.security.validator.ValidatorException: No trusted certificate found".似乎给了它错误的路径。

JSSE的KeyStore.load()方法将接受任何类型的InputStream,如文档所示。它不一定非得是FileInputStream。

下面是我的文件结构:

代码语言:javascript
复制
- iComputer
   - src
        - com
            - ...
        - res
            - server.public
            - client.private

基于这个文件结构,正确工作的路径是"res/server.public"和JAR文件。下面是我对OP中代码的修订:

代码语言:javascript
复制
private static void setupServerKeystore() throws GeneralSecurityException, IOException {
        mServerKeyStore = KeyStore.getInstance( "JKS" );
        mServerKeyStore.load(iComputer.class.getClassLoader().getResourceAsStream("res/server.public"), 
                            "pswd".toCharArray());
    }

private static void setupClientKeyStore() throws GeneralSecurityException, IOException {
        mClientKeyStore = KeyStore.getInstance( "JKS" );
        mClientKeyStore.load(iComputer.class.getClassLoader().getResourceAsStream("res/client.private"),
                               mPassphrase.toCharArray());
}

帮你自己一个忙,用它作为放置密钥文件的参考点。这将节省您数不清的时间,试图找出您为什么要得到一个NullPointerExceptionFileNotFoundException

票数 0
EN

Stack Overflow用户

发布于 2015-04-02 13:03:50

资源不是文件,不能用FileInputStream.打开,只需将资源作为流来打开,完全摆脱FileInputStream和所有的名称处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29404615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档