Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取包含在jar中的文件_Java_Jar_Path_Embedded Resource_Readfile - Fatal编程技术网

Java 读取包含在jar中的文件

Java 读取包含在jar中的文件,java,jar,path,embedded-resource,readfile,Java,Jar,Path,Embedded Resource,Readfile,我有一个jar文件,比如archive1.jar,位于/home/ext/libs中。它有几个类,在jar层次结构的根目录下还有一个文本文件(data.txt)。这个jar的一个类(比如Data.java)读取文件以启动一些内部数据结构 现在,archive1.jar被作为另一个程序的库包含,称为解析,该程序在一个完全不同的目录/home/progs中执行(archive1.jar在程序执行命令的类路径中指定) 我面临的问题是,现在Data.java无法再理解Data.txt的路径,因为它假定D

我有一个jar文件,比如archive1.jar,位于/home/ext/libs中。它有几个类,在jar层次结构的根目录下还有一个文本文件(data.txt)。这个jar的一个类(比如Data.java)读取文件以启动一些内部数据结构

现在,archive1.jar被作为另一个程序的库包含,称为解析,该程序在一个完全不同的目录/home/progs中执行(archive1.jar在程序执行命令的类路径中指定)

我面临的问题是,现在Data.java无法再理解Data.txt的路径,因为它假定Data.txt驻留在/home/progs中,而不是/home/ext/libs中的archive1.jar中

我的问题是,我应该在Data.java中做什么更改,以便它理解Data.txt在archive1.jar中?简而言之,如何使Data.java能够读取archive1.jar中的Data.txt,而不管调用程序在哪里


注意:在threadJava resource as file中,事情有点不同,而且对于如何读取jar中的文件也没有答案。有人说这可能是不可能的。

访问
JAR
存档中的资源文件的方法是使用
getClass().getResourceAsStream()
。使用此选项可以确保资源是从归档文件加载的,而不是从文件系统加载的。例如,如果您在
JAR
归档文件中的
data.txt
位置与
data.java
位置相同,那么您可以通过这种方式访问
data.txt

InputStream is=getClass().getResourceAsStream("data.txt");

一旦您获得了资源的
InputStream
,就可以按照您喜欢的方式进行操作。

我们可以看到一些代码吗?我查看了“Java资源作为文件”线程,但没有找到合适的答案。这是代码。java内部有BufferedReader br=new BufferedReader(new FileReader(“Data.txt”));这个Data.java位于archive1.jar中,而archive1.jar又位于/home/ext/libsHow中。当Q(以及它的副本)告诉您要做什么,而您根本没有做什么时,您是否找不到适当的答案?我想你要找的是getResourceAsStream;other.jar our.com.Main在清单中指定或通过相对路径指定。