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

Java 读取文本文件在IDE中有效,但在.jar中无效,java,intellij-idea,Java,Intellij Idea,我正在使用 File file = new File("res/movies.txt"); 从捆绑的.txt文件中读取文本。在IntelliJ IDEA中运行程序时,我的代码工作得非常好,但是当我创建一个.jar文件并运行它时,它会给出一个“未找到文件”错误。如何使代码在IDE和jar文件中工作?尝试更改 File File=新文件(“res/movies.txt”) 到 File File=新文件(“res/movies.jar”) 当然,这假设文件名是movies.jar,请尝试更改 Fi

我正在使用

File file = new File("res/movies.txt");
从捆绑的.txt文件中读取文本。在IntelliJ IDEA中运行程序时,我的代码工作得非常好,但是当我创建一个.jar文件并运行它时,它会给出一个“未找到文件”错误。如何使代码在IDE和jar文件中工作?

尝试更改

File File=新文件(“res/movies.txt”)

File File=新文件(“res/movies.jar”)

当然,这假设文件名是movies.jar,请尝试更改

File File=新文件(“res/movies.txt”)

File File=新文件(“res/movies.jar”)


当然,这假设文件名是movies.jar,您需要将该文件作为资源加载。你可以使用或;每个将为资源返回一个
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);
            }
        }
    }
}

您需要将文件作为资源加载。你可以使用或;每个将为资源返回一个
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);
            }
        }
    }
}

不,关键是文本文件在jar文件中。不,关键是文本文件在jar文件中。如果文件作为只读“资源”放置在类路径(在jar中),您可以像Jon Skeet的答案一样将其作为InputStream获取。文件仅用于操作系统文件系统。如果该文件作为只读“资源”放在类路径(在jar中)上,您可以像Jon Skeet的答案一样将其作为InputStream获得。文件只是操作系统的文件系统。我很难理解你在这里的一些地方是什么意思。你能编辑你的帖子并添加你要使用的实际代码吗?谢谢。@Mikkel:我已经添加了一个例子,尽管我怀疑通过一些研究,你可以自己去那里。我正在努力理解你在这里的一些地方是什么意思。你能编辑你的帖子并添加你要使用的实际代码吗?谢谢。@Mikkel:我添加了一个例子,尽管我怀疑通过一些研究,你可以自己得到。