java - 读取文本文件在 IDE 中有效,但在 .jar 中无效

标签 java intellij-idea

我正在使用

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

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

最佳答案

您需要将文件加载为资源。您可以使用 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);
            }
        }
    }
}

关于java - 读取文本文件在 IDE 中有效,但在 .jar 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48028239/

相关文章:

java - 在ExternalContext中找不到pages/index.xhtml作为资源

java - intelliJ 中的 Maven 无法读取 Artifact 描述符 - 启用快照更新

intellij-idea - IntelliJ 上 SonarLint v2.0 的连接模式不起作用?

Java Streams 和 List of List 的列表

java - 如何在 while 循环中获取新的操作命令

java - HSM:使用 JAVA 应用程序引入 HSM

按钮上的 Java Actionlistener

linux - 所选目录不是有效的 glassfish 主目录

intellij-idea - 在 IntelliJ IDEA 中看不到项目文件夹

intellij-idea - 我可以在同一个项目中同时在两种不同的代码格式配置之间切换吗?