【问题标题】:Read a file, which is included inside a jar [duplicate]读取包含在 jar 中的文件 [重复]
【发布时间】:2013-06-19 01:11:36
【问题描述】:

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

现在,archive1.jar 作为另一个程序的库包含在内,称为 Parsing,它在完全不同的目录 /home/progs 中执行(archive1. jar在程序执行命令的classpath中指定)。

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

我的问题是我应该在 Data.java 内进行哪些更改,以便它了解 data.txt 在 archive1.jar 内?总之,如何让Data.java无论调用程序在哪里都能读取archive1.jar里面的data.txt。

注意:在线程Java资源作为文件中,情况有点不同,而且对于如何读取jar中的文件也没有答案。有人说这可能是不可能的。

【问题讨论】:

  • 我们可以看看一些代码吗?
  • 我查看了“Java 资源作为文件”线程,但并没有真正找到合适的答案。这是代码。在 Data.java 中,有 BufferedReader br = new BufferedReader(new FileReader("data.txt"));这个 Data.java 在archive1.jar 中,而archive1.jar 又在/home/ext/libs 中
  • 当那个 Q(以及它的重复内容)告诉你该做什么而你根本没有做时,你怎么能找不到合适的答案?
  • stackoverflow.com/questions/574809/… 我想你要找的是getResourceAsStream。
  • java -cp archive1.jar;other.jar our.com.Main 或者通过清单中的相对路径指定。

标签: java jar path embedded-resource readfile


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 2018-08-28
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2013-07-05
    • 2019-11-19
    • 2011-02-02
    • 2012-10-03
    相关资源
    最近更新 更多