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

标签 java deployment executable-jar

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

我有一个“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/

相关文章:

java - 将文本拆分为文本末尾有 "spaces"的段落?

java - 为什么 Spring AOP 不在运行时编织外部 jar?

java - .jar 文件创建中的警告

java - 单击按钮打开拨号盘,该字符串例如 String str = "*#06#"应该在拨号盘中打开。

java - AppEngine - 列表字段上的 JDO 查询

deployment - 我应该在哪里存储不以纯文本形式存储的 Azure 角色设置?

python - 在 CI 服务器虚拟环境上安装包依赖项

android - 将应用程序部署到许多 Android 平板电脑

java - 在 Mac 上合并来自 Processing 的 JAR 文件

java - 无法关闭在 Spring Tool Suite 中创建的基于 java 的 Web 服务