【问题标题】:Reading text file works in IDE but not in .jar读取文本文件在 IDE 中有效,但在 .jar 中无效
【发布时间】:2017-12-30 16:41:33
【问题描述】:

我正在使用

File file = new File("res/movies.txt");

从捆绑的 .txt 文件中读取文本。在 IntelliJ IDEA 中运行程序时,我的代码运行良好,但是当我创建一个 .jar 文件并运行它时,它会给出“找不到文件”错误。我该怎么做才能使代码在 IDE 和 jar 文件中都可以工作?

【问题讨论】:

  • 如果文件作为只读“资源”放置在类路径中(在 jar 中),您可以像 Jon Skeet 的回答一样将其作为 InputStream 获取。 File 仅用于操作系统文件系统。

标签: java intellij-idea


【解决方案1】:

您需要将文件加载为资源。您可以使用Class.getResourceAsStreamClassLoader.getResourceAsStream;每个都会为资源返回一个InputStream

获得InputStream 后,将其包装在InputStreamReader(指定适当的编码)中以从中读取文本。

如果您需要有时从任意文件中读取并有时从资源中读取,最好使用单独的路径来创建FileInputStream文件或上述资源的方法之一,然后以相同的方式执行其他所有操作。

这是一个打印来自resources/names.txt 的每一行的示例,应该与代码捆绑在同一个 jar 文件中:

package example;

import java.io.*;
import java.nio.charset.*;

public class Test {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(
            new InputStreamReader(
                Test.class.getResourceAsStream("/resources/names.txt"),
                StandardCharsets.UTF_8))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
}

【讨论】:

  • 我很难理解你在这里的一些地方是什么意思。您可以编辑您的帖子并添加您将使用的实际代码吗?谢谢。
  • @Mikkel:我添加了一个示例,尽管我怀疑通过一些研究您可以自己获得。
【解决方案2】:

尝试改变

文件 file = new File("res/movies.txt");

文件 file = new File("res/movies.jar");

这当然假设文件名是movies.jar

【讨论】:

  • 不,关键是文本文件在jar文件中。
猜你喜欢
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多