因此,我相信这个问题已经问了一百万遍了,我已经阅读了几个小时,并尝试了一些人给出的几种选择,但是没有一个对我有用。
我想列出应用程序JAR内目录中的所有文件,因此在IDE中可以运行:
File f = new File(this.getClass().getResource("/resources/").getPath());
for(String s : f.list){
System.out.println(s);
}
这给了我目录中的所有文件。
现在,我也尝试过:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("resources/");
InputStreamReader inReader = new InputStreamReader(in);
Scanner scan = new Scanner(inReader);
while (scan.hasNext()) {
String s = scan.next();
System.out.println("read: " + s);
}
System.out.println("END OF LINE");
然后从IDE中打印目录中的所有文件。外部IDE打印:“行尾”。
现在,我也可以在Jar中找到一个条目:
String s = new File(this.getClass().getResource("").getPath()).getParent().replaceAll("(!|file:\\\\)", "");
JarFile jar = new JarFile(s);
JarEntry entry = jar.getJarEntry("resources");
if (entry != null){
System.out.println("EXISTS");
System.out.println(entry.getSize());
}
那是我必须对那个String进行的可怕编码。
无论如何…我无法在Jar的“ resources”目录中获取资源列表。该怎么办?
如果不先枚举Jar文件的内容,就无法简单地获取内部资源的过滤列表。
幸运的是,这实际上并不难(对我来说幸运的是,您已经完成了大部分工作)。
基本上,一旦有了对的引用JarFile
,您只需要询问它entries
并在该列表上进行迭代即可。
通过检查JarEntry
所需匹配项的名称(即resources
),您可以过滤所需的元素…
例如…
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class ReadMyResources {
public static void main(String[] args) {
new ReadMyResources();
}
public ReadMyResources() {
JarFile jf = null;
try {
String s = new File(this.getClass().getResource("").getPath()).getParent().replaceAll("(!|file:\\\\)", "");
jf = new JarFile(s);
Enumeration<JarEntry> entries = jf.entries();
while (entries.hasMoreElements()) {
JarEntry je = entries.nextElement();
if (je.getName().startsWith("resources")) {
System.out.println(je.getName());
}
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
jf.close();
} catch (Exception e) {
}
}
}
}
警告
这种类型的问题实际上有点问。与其尝试在运行时读取Jar的内容,不如生成某种包含可用资源列表的文本文件,这会更好。
这可以由您的构建过程在创建Jar文件之前动态产生。然后(getClass().getResource()
例如,通过)读取该文件,然后在文本文件中查找每个资源列表,这将是一个简单得多的解决方案…恕我直言
我刚刚遇到了jar中的主类无法读取文件夹内容的问题。该类包含 这里sysout返回。 但当我尝试这样的东西时 为什么会这样,这两种方法对JAR内部内容的读取机制有什么区别。简单罐子里的东西
问题内容: 我正在尝试访问我的jar文件中的目录。我想浏览目录本身内的每个文件。例如,我尝试使用以下方法: 如果我测试此小程序,它将很好地工作。但是,一旦将内容物放入广口瓶中,并不是有几个原因。如果使用此代码,则URL始终指向jar外部,因此必须将目录放在此处。但是如果我使用的话,它不能在jar里面起作用,因为我得到了错误。我确定该目录存在于jar中。我应该如何获得罐子里的东西? 问题答案: Ja
问题内容: 我的程序需要读取一些文本配置文件。我当前的代码是: 当我在eclipse中本地运行它时,此方法有效,尽管我确实必须进行破解以处理路径名中的空间。配置文件与上述方法位于同一软件包中。但是,当我将应用程序导出为jar时,出现了问题。该jar位于共享的映射网络驱动器Z:上。当我从命令行运行应用程序时,出现此错误: java.io.FileNotFoundException:文件:\ Z:\
问题内容: 我已经编写了一个程序来加密Netbeans中的图像。从Netbeans运行时,该程序运行良好,但是当我将其构建为.jar文件时,即使我将图像文件与.jar文件放在同一文件夹中,它也无法读取图像。 //加密 //加载/写入图片 问题答案: 目前尚不清楚以下哪个触发您的错误。这个 将从当前目录读取,该目录不一定与您的jar文件所在的目录相同。 这个 将从类所在的jar文件中的目录中读取。请
我试图编写一个简单的复数计算器,可以计算以下表达式: 输入1:(10 30i)(90 20i) 预期输出:(100 50i) 输入2:(10 30i)-(90 20i) 预期输出:(-80 10i) 编辑:我注意到第一次前瞻读取是10而不是40(ascii值 '(' ) . 我如何解决这个问题? 我的代码: 但它总是输出“对不起,我帮不了你。”
无效的流头:0000002b at java.io.objectinPutStream.ReadStreamHeader(ObjectinPutStream.java:781)at java.io.objectinPutStream.(ObjectinPutStream.java:278)at servicerEquest.run(servicerEquest.java:24)at java.ut