我无法从jar中读取文本文件。我在解压缩的同时对它进行了管理,但现在我已将其归档,但它已经无法正常工作。 罐子有:
现在,我正在使用BufferedReader和FileReader
f = new FileReader("Splash.txt");
in = new BufferedReader(f);
但是从google搜索我知道只能从jar外部读取文件。
我的问题是:如何从jar中读取文件?
答案 0 :(得分:2)
假设您正在执行BTA.jar
,则可以使用
InputStream in = YourClass.class.getResourceAsStream("/Splash.txt");
检索InputStream
并通过BufferedReader
将其传递给InputStreamReader
。
传递给方法的路径格式规则在Class
类的javadoc中定义here。
答案 1 :(得分:0)
问题是Splash.txt
不是一个文件,它的一系列字节位于一个(轻度)压缩文件中,该文件在Jar / Zip标准规定的目录中有一个命名条目。
此测量可以使用FileReader
来读取文件,而是需要通过Class
资源管理API访问它,例如..
getClass().getResourceAsStream("/Splash.txt");
或者,如果您尝试从static
上下文
Splash.class.getResourceAsStream("/Splash.txt");
不要忘记,你有责任在完成后关闭InputStream
,例如......
try (InputStream is = getClass().getResourceAsStream("/Splash.txt")) {....
答案 2 :(得分:0)
jar只是一个zip文件,可以像这样阅读..
ZipFile file = new ZipFile("/home/Desktop/myjar.jar");
Enumeration<? extends ZipEntry> entries = file.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
if (entry.getName().startsWith("splash")) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream(entry)))) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}