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:
publicvoidloadFiles(){File dir =loadFileFromResourceFolder(FILE_PATH_DOCUMENT_DESIGNER);// Ignore .DS_StoreFile[] files = dir.listFiles(newFilenameFilter(){publicbooleanaccept(File dir,String name){return!name.equals(".DS_Store");}});}/**
* Datei als Stream aus Pfad laden
*
* @throws IOException
* @throws URISyntaxException
*/publicstaticFileloadFileFromResourceFolder(String filePath)throwsURISyntaxException{
LOGGER.info("START loadFileFromResourceFolder");ClassLoader classLoader =newStorageHelper().getClass().getClassLoader();URL resource = classLoader.getResource(filePath);if(resource ==null){thrownewIllegalArgumentException("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);}returnnewFile(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...
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 fileprivateList<Path>getPathsFromResourceJAR(String folder)throwsURISyntaxException,IOException{List<Path> result;// get path of the current running JARString jarPath =getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath();// file walks JARURI 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;}
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.