Java 从jar加载文件夹

Java 从jar加载文件夹,java,xml,Java,Xml,我正在尝试访问jar文件中的目录。我想浏览目录中的每个文件。我尝试使用以下方法: File[] files = new File("ressources").listFiles(); for (File file : files) { XMLParser parser = new XMLParser(file.getAbsolutePath()); // some work } 如果我测试这个,它工作得很好。但是

我正在尝试访问jar文件中的目录。我想浏览目录中的每个文件。我尝试使用以下方法:

File[] files = new File("ressources").listFiles();
        for (File file : files) {
            XMLParser parser = new XMLParser(file.getAbsolutePath());
            // some work
        } 
如果我测试这个,它工作得很好。但是一旦我把里面的东西放进罐子里,它就不会有了,因为有几个原因。如果我使用这段代码,URL总是指向jar之外

我的项目结构:

src 
   controllers
   models
         class that containt traitement
   views
ressources
见此:

基本上,您只需使用ZipInputStream来查找文件列表(a.jar与a.zip相同)


一旦知道了文件名,就可以使用getClass().getResource(字符串路径)获取文件的URL。

我猜这个
jar
在您的类路径上

您可以使用
ClassLoader
列出目录中的所有文件

首先可以获取文件名列表,然后可以从
类加载器
获取单个文件的
URL
s:

public static void main(String[] args) throws Exception {
    final String base = "/path/to/folder/inside/jar";
    final List<URL> urls = new LinkedList<>();
    try (final Scanner s = new Scanner(MyClass.class.getResourceAsStream(base))) {
        while (s.hasNext()) {
            urls.add(MyClass.class.getResource(base + "/" + s.nextLine()));
        }
    }
    System.out.println(urls);
}
publicstaticvoidmain(字符串[]args)引发异常{
最终字符串base=“/path/to/folder/inside/jar”;
最终列表URL=新链接列表();
try(最终扫描程序s=新扫描程序(MyClass.class.getResourceAsStream(base))){
而(s.hasNext()){
add(MyClass.class.getResource(base+“/”+s.nextLine());
}
}
System.out.println(URL);
}
您可以使用
URL
执行任何操作-要么读取
InputStream
并将其复制到内存中,要么将
InputStream
复制到硬盘上的
文件中

请注意,这肯定适用于默认的
URLClassLoader
,如果您使用的是小程序或自定义
ClassLoader
,则此方法可能不起作用

NB:

您有一个输入错误-它的
资源
不是
资源


您应该在项目中使用,这是惯例。

首先,我创建了可执行jar,其中包含一些Resources,我的程序使用IDE,但jar noI将字符串基修改为我的文件夹/Resources,我得到了以下异常:java.io.Reader上的线程“main”java.lang.NullPointerException中的异常。(未知源)在java.io.InputStreamReader。(未知源代码)在java.util.Scanner。(未知源代码)@ELMEKKIAnouar你检查过你的打字错误吗?我假设您使用了正确的
作为类引用。我将我的文件夹重命名为resources,但我总是得到例外。您可以解压缩jar以确保文件夹在其中吗?我解压缩jar我没有找到资源我直接在根目录中获取所有文件