我想从我的jar中读取资源,如下所示:
File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferredReader reader = new BufferedReader(new FileReader(file));
//Read the file
Run Code Online (Sandbox Code Playgroud)
并且它在Eclipse中运行时工作正常,但是如果我将它导出到jar中运行它就会出现IllegalArgumentException:
Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical
Run Code Online (Sandbox Code Playgroud)
而且我真的不知道为什么,但经过一些测试我发现如果我改变了
file = new File(getClass().getResource("/file.txt").toURI());
Run Code Online (Sandbox Code Playgroud)
至
file = new File(getClass().getResource("/folder/file.txt").toURI());
Run Code Online (Sandbox Code Playgroud)
然后它的工作正好相反(它适用于jar而不是eclipse).
我正在使用Eclipse,我的文件夹在一个类文件夹中.
我有这个代码从目录中读取所有文件.
File textFolder = new File("text_directory");
File [] texFiles = textFolder.listFiles( new FileFilter() {
public boolean accept( File file ) {
return file.getName().endsWith(".txt");
}
});
Run Code Online (Sandbox Code Playgroud)
它很棒.它使用目录"text_directory"中以".txt"结尾的所有文件填充数组.
如何在 JAR文件中以类似的方式读取目录的内容?
所以我真正想做的是,列出我的JAR文件中的所有图像,所以我可以加载它们:
ImageIO.read(this.getClass().getResource("CompanyLogo.png"));
Run Code Online (Sandbox Code Playgroud)
(那个是有效的,因为"CompanyLogo"是"硬编码的",但JAR文件中的图像数量可以是10到200个可变长度.)
编辑
所以我想我的主要问题是:如何知道我的主类所在的JAR文件的名称?
当然,我可以使用它来阅读它java.util.Zip.
我的结构是这样的:
他们就像:
my.jar!/Main.class
my.jar!/Aux.class
my.jar!/Other.class
my.jar!/images/image01.png
my.jar!/images/image02a.png
my.jar!/images/imwge034.png
my.jar!/images/imagAe01q.png
my.jar!/META-INF/manifest
Run Code Online (Sandbox Code Playgroud)
现在我可以使用以下命令加载例如"images/image01.png":
ImageIO.read(this.getClass().getResource("images/image01.png));
Run Code Online (Sandbox Code Playgroud)
但只是因为我知道文件名,其余的我必须动态加载它们.