Dateien aus dem Resource Folder laden

internet

Top Contributor
Hallo,

ich möchte gerne alle Dateien aus einem Ressource Folder laden und in einem Array speichern:

Leider ist File[] files immer NULL...
Wie kann ich das lösen?

Java:
public void loadFiles(){
    File dir = loadFileFromResourceFolder(FILE_PATH_DOCUMENT_DESIGNER);

    // Ignore .DS_Store
    File[] files = dir.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return !name.equals(".DS_Store");
            }
    });
}


/**
     * Datei als Stream aus Pfad laden
     *
     * @throws IOException
     * @throws URISyntaxException
     */
    public static File loadFileFromResourceFolder(String filePath) throws URISyntaxException {

        LOGGER.info("START loadFileFromResourceFolder");

        ClassLoader classLoader = new StorageHelper().getClass().getClassLoader();
        URL resource = classLoader.getResource(filePath);

        if (resource == null) {
            throw new IllegalArgumentException("file not found! " + filePath);
        } else {

            // failed if files have whitespaces or special characters
            // return new File(resource.getFile());
           
            URI uri = resource.toURI();
           
            String fileName = uri.toString();
           
            if(fileName.toString().endsWith("/")) {
                fileName = fileName.substring(0, fileName.length()-1);
            }

            return new File(fileName);
        }

    }

Ich möchte gerne die Dateien aus dem laufenden Wildfly laden.
Da das dynamisch ist, möchte ich aber immer erst auf das Verzeichnis prüfen... Also sprich ich starte mit "DocumentDesigner", wenn hier Dateien drin sind, dann lade diese... Wenn es ein Verzeichnis ist, dann gehe eine Ebene weiter usw...

1689866751103.png
 
Du musst unterscheiden ob sich die Ressourcen in einem JAR befinden oder einfach in einem Ordner.
Java:
    // Get all paths from a folder that inside the JAR file
    private List<Path> getPathsFromResourceJAR(String folder)
        throws URISyntaxException, IOException {

        List<Path> result;

        // get path of the current running JAR
        String jarPath = getClass().getProtectionDomain()
                .getCodeSource()
                .getLocation()
                .toURI()
                .getPath();

        // file walks JAR
        URI uri = URI.create("jar:file:" + jarPath);
        try (FileSystem fs = FileSystems.newFileSystem(uri, Collections.emptyMap())) {
            result = Files.walk(fs.getPath(folder))
                    .filter(Files::isRegularFile)
                    .collect(Collectors.toList());
        }

        return result;

    }
Bei Spring Boot geht es noch mal anders: https://www.baeldung.com/spring-classpath-file-access (keine Ahnung was du brauchst)
 
Zuletzt bearbeitet:
Wenn Du die Dateien aus dem resource Ordner laden willst, dann bedeutet das doch, dass Du zur Übersetzungszeit die genauen Dateien kennst.
Daher ist es aus meiner Sicht nicht notwendig, da über ein Verzeichnis zu gehen ohne genau zu wissen, was da drin ist.

Wenn die Dateien sich regelmäßig ändern, dann kann man z.B. auch eine Liste der Dateien zur Übersetzungszeit anlegen, aber in der Regel hat man doch ganz bestimmte Ressourcen und auf die greift man dann zu. (Und das in der Regel mit zusätzlichen Daten. Die einzelnen Dateien bedeuten ja irgendwas und dazu gehören oft weiterführende Daten.)

Und dann greift man über die üblichen Methoden auf die Ressourcen zu ohne die typische File IO Klassen zu nutzen.

Das wäre so der Ansatz, zu dem ich immer gerne tendiere.
 

Zurück
Oben