gpt4 book ai didi

java - 当我的类和文本文件位于可执行 JAR 中时,如何编写代码来访问文本文件?

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:31 25 4
gpt4 key购买 nike

我知道这个问题以前已经被问过很多很多次了,但答案似乎对我没有帮助。这是我的具体问题:

我有一个“TaQL”类,它从其 void main(String args[]) 方法中访问两个文本文件。这两个文本文件与此类位于同一包中:包“taql”。以下代码在 Eclipse (Mars) IDE 中运行良好:

    String stoplist = TaQL.class.getResource(stoplist).toURI().getPath();
String input = TaQL.class.getResource(input).toURI().getPath();

当我输出这两个字符串时,我得到了资源的正确路径,并且代码嗡嗡作响。

但是,当我将所有内容打包到 JAR 中后使用此方法时,两个字符串都返回“null”。

以下是我的代码对非 JAR 版本中的每个文本文件执行的操作

  1. 获取每个文本文件的文件名字符串。
  2. 从一个字符串创建一个新的 File 对象,从另一个字符串创建一个新的 FileReader 对象。
  3. 它们分别被输入到非索引字表函数和数据输入迭代器中。

我真正需要做的是无缝访问这两个文本文件,一旦它们全部位于 JAR 中,然后使用对它们的一些引用来创建 File 和 FileReader 对象。

这是我在主要方法中放入的一些诊断代码。它将显示 JAR 文件所看到的文件内容(请注意,输入和非索引字表都是文件名字符串):

    System.out.println("intput argument" + input);

System.out.println("Resource path"+TaQL.class.getResource(stoplist));

stoplist = TaQL.class.getResource(stoplist).toURI().getPath();
input = TaQL.class.getResource(input).toURI().getPath();

System.out.println("Path"+stoplist);
System.out.println("Input path" + input);

运行 JAR 版本的程序的命令行输出(请注意,当我从 Eclipse 运行时,此代码工作得很好)

enter image description here

最佳答案

要实际访问可能位于 jar 文件中的文件的字节,您需要使用 Class#getResourceAsStream(stopList)。该 URI 将为您提供一个不能与 File 或 FileInputStream 一起使用的路径。它在您的 IDE 中运行是因为 IDE 尚未打包文件,因此 #getPath 会找到实际的文件路径。

所以试试这个:

try (Reader inputReader = 
new InputStreamReader(
TaQL.class.getResourceAsStream(input))) {

BufferedReader in = new BufferedReader(inputReader);

for (String line; (line = in.readLine()) != null;) {
// do something with the line
}
}

关于java - 当我的类和文本文件位于可执行 JAR 中时,如何编写代码来访问文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com