javalistresourcesdirectory

How can I access a folder inside of a resource folder from inside my jar File?


I have a resources folder/package in the root of my project, I "don't" want to load a certain File. If I wanted to load a certain File, I would use class.getResourceAsStream and I would be fine!! What I actually want to do is to load a "Folder" within the resources folder, loop on the Files inside that Folder and get a Stream to each file and read in the content... Assume that the File names are not determined before runtime... What should I do? Is there a way to get a list of the files inside a Folder in your jar File? Notice that the Jar file with the resources is the same jar file from which the code is being run...


Solution

  • Finally, I found the solution:

    final String path = "sample/folder";
    final File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
    
    if(jarFile.isFile()) {  // Run with JAR file
        final JarFile jar = new JarFile(jarFile);
        final Enumeration<JarEntry> entries = jar.entries(); //gives ALL entries in jar
        while(entries.hasMoreElements()) {
            final String name = entries.nextElement().getName();
            if (name.startsWith(path + "/")) { //filter according to the path
                System.out.println(name);
            }
        }
        jar.close();
    } else { // Run with IDE
        final URL url = Launcher.class.getResource("/" + path);
        if (url != null) {
            try {
                final File apps = new File(url.toURI());
                for (File app : apps.listFiles()) {
                    System.out.println(app);
                }
            } catch (URISyntaxException ex) {
                // never happens
            }
        }
    }
    

    The second block just work when you run the application on IDE (not with jar file), You can remove it if you don't like that.