Java类路径问题
我有一个products.jar文件。里面有一个classJava类路径问题,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
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文件的根目录下有两个dircom
和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");