Java类路径问题

Java类路径问题,java,resources,classpath,Java,Resources,Classpath,我有一个products.jar文件。里面有一个classcom.ClassA。该项目的结构如下 products |--test |--com |--ClassA.java |--dependencies |---inputs.txt 在eclipse内部,ClassA.java正在通过以下路径访问inputs.txt文件,并且工作正常 private static final String PROPER

我有一个products.jar文件。里面有一个class
com.ClassA
。该项目的结构如下

products
    |--test
        |--com
            |--ClassA.java
        |--dependencies
            |---inputs.txt
在eclipse内部,
ClassA.java
正在通过以下路径访问
inputs.txt
文件,并且工作正常

private static final String PROPERTIES_FILE_PATH = "test/dependencies/inputs.txt";
test
包位于java构建路径->源代码中

但是当我将这个项目导出为
products.jar
时,我发现jar文件中没有
test
目录。jar文件的根目录下有两个dir
com
dependencies
。因此,当我试图通过命令行执行
ClassA
(驻留在jar文件中)时,我得到以下异常:

JUnit version 4.8.2
java.io.FileNotFoundException: test/dependencies/inputs.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:137)
at java.io.FileInputStream.<init>(FileInputStream.java:96)
JUnit版本4.8.2 java.io.FileNotFoundException:test/dependencies/inputs.txt(没有这样的文件或目录) 在java.io.FileInputStream.open(本机方法) 位于java.io.FileInputStream。(FileInputStream.java:137) 位于java.io.FileInputStream。(FileInputStream.java:96) 因此,在发现jar文件中没有导出
test
dir之后,我将ClassA.java中的文件路径更改为
dependencies/inputs.txt
。它在eclipse中不起作用,但我认为它在jar中会起作用,因为jar文件位于类路径中,
dependencies
文件夹位于jar文件的根目录下,所以java启动器将能够找到
dependencies
文件夹,然后找到
inputs.txt
文件


但不幸的是,它也不起作用。

您不能使用
FileInputStream
读取打包在JAR中的文件-它不再是文件了<代码>文件输入流仅适用于实际磁盘文件

您需要使用
Class.getResourceAsStream
()读取资源,例如

您取消了
test
前缀,因为它不在JAR文件结构中。

FileInputStream()不会在JAR中读取,只读取文件系统中的文件。使用.getClass().getResourceAsStream(resourcename)或.getClass().getClassLoader().getResourceAsStream(resourcename)

有关和的javadocs的更多信息

InputStream stream = getClass().getResourceAsStream("/dependencies/inputs.txt");