Java 用getResourceAsStream替换FileInputStream

Java 用getResourceAsStream替换FileInputStream,java,Java,我当前正在使用以下代码读取公钥文件: // Read Public Key. File filePublicKey = new File(path + "/public.key"); FileInputStream fis = new FileInputStream(path + "/public.key"); byte[] encodedPublicKey = new byte[(int) filePublicKey.length()]; fis.rea

我当前正在使用以下代码读取公钥文件:

    // Read Public Key.
    File filePublicKey = new File(path + "/public.key");
    FileInputStream fis = new FileInputStream(path + "/public.key");
    byte[] encodedPublicKey = new byte[(int) filePublicKey.length()];
    fis.read(encodedPublicKey);
    fis.close();
但是,我希望在jar中包含关键文件。我已将密钥文件拖到eclipse中的项目中,并尝试使用以下内容加载公钥,以替换上面的内容:

    InputStream is = getClass().getResourceAsStream( "/RSAAlgorithm2/public.key" );
    byte[] encodedPublicKey = new byte[(int) 2375];
    is.read(encodedPublicKey);
    is.close();
然而,我不断得到一个NullPointerException

位于RSA的java.lang.NullPointerException.LoadKeyPair(RSA.java:122)位于 main(RSA.java:31)


这是因为我在文件中加载错误吗?文件可以像这样拖入eclipse并加载吗?还是需要将它们从JAR中分离出来?

在执行
getResourceAsStream
之后,检查
是否为
is
null
。如果是,则未找到资源。在本例中,检查文件的路径,它是相对于类路径的。我不知道您的项目设置,但我会尝试简单地使用
“/public.key”

使用此名称,您必须将“public.key”文件放入RSAAlgorithm2包中。这意味着在“jar”文件中,您应该会看到一个名为“RSAAlgorithm2/public.key”的条目。

如果添加堆栈跟踪,则指示它引用的行总是很有用的。在您的情况下(
RSA.main(RSA.java:31)
),我希望
是.read(encodedPublicKey)
是RSA.java
中的第31行。它取决于您将public.key文件拖动到的位置,它必须在类路径上可用。这可能会有所帮助:谢谢,它是空的。我没有意识到文件必须在src文件夹中。