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:我添加了一个例子,尽管我怀疑通过一些研究,你可以自己得到。