Dateien in Verzeichnissen rekursiv auflisten wirft Exception

Bitte aktiviere JavaScript!
Hallo zusammen,


ich möchte beginnend von einem Verzeichnis das Verzeichnis und alle Unterverzeichnisse rekursiv durchlaufen. Ziel ist es dabei alle Dateien zu erfassten. In dem speziellen Kontext alle Dateien mit der Dateiendung *.txt.

Hierzu habe ich folgenden Code:

Java:
import java.nio.file.Files;
import java.nio.file.Paths;


public class Backup {

    public static void main(String[] args) {

        try {
            Files.walk(Paths.get("/"))
                    .filter(p -> p.toString().endsWith(".txt"))
                    .forEach(p -> {
                        System.out.println(p.getFileName());
                    });

        } catch (Exception e) {
            System.out.println("Error");
        }
    }
}

}
Es spielt keine Rolle ob ich es unter Linux kompiliere (wie im Code zu sehen) oder aber unter Windows dann aber mit Paths.get("C:\\"). Ich hatte es zum testen einmal auf einem anderen System kompiliert um zu sehen ob es ggf. an der Installation (JRE Version etc. liegt). Das Kompilieren klappt ohne eine Fehlermeldung.

Was mache ich falsch bzw. wie kann ich herausfinden wo das Problem genau liegt? Ich muss zugeben, dass ich im Debugging in Java noch nicht so fit bin. Habe mit IntelliJ versucht Schritt für Schritt auszuführen und zu schauen was passiert. Allerdings erhalte ich keine aussagekräftige Meldung mit der ich weiter Googlen könnte.
 
Hatte ich schon mit System.out.println("e.getMessage()") jedoch habe ich die Meldung "überlesen". Weiß auch nicht wie das passieren konnte.

Es kommt die Meldung:
java.nio.file.AccessDeniedException: C:\$Recycle.Bin\S-1-5-18
Process finished with exit code 0

Wie verfahre ich in einem solchen Fall, dass die Datei einfach übersprungen wird und dann die nächste Datei gesucht wird?
 
Versuche es besser so:
Code:
public class Backup {

    public static void main(String[] args) throws IOException {

        Files.walkFileTree(Paths.get("/"), new FileVisitor<Path>() {

            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                if (file.toString().endsWith(".txt")) {
                    System.out.printf("Visiting file %s\n", file.getFileName());
                }
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return FileVisitResult.SKIP_SUBTREE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;
            }
        });
        
    }
}
mit dem FileVisitor ist es möglich auf Fehler zu reagieren (visitFileFailed). Statt FileVisitor kannst du auch java.nio.file.SimpleFileVisitor<T> überschreiben.
 
Hallo Oneixee5,

vielen vielen vielen Dank! Das hat mir super geholfen!

Ich wünsche dir ein schönes Wochenende.

Viele Grüße
jvfrmr
 
Passende Stellenanzeigen aus deiner Region:

Oben