读取文本文件在IDE中工作,但在.jar中不起作用

Mik*_*kel 1 java intellij-idea

我在用

File file = new File("res/movies.txt");
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 9

您需要将该文件作为资源加载.你可以使用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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)