2017-02-15 1 views
0

Voici la méthodeJava 8 Files.walk ne retourne pas tous les chemins

public List<Path> listAllPaths() throws IOException { 
     Files.walk(Paths.get("/tmp")).forEach(e -> System.out.println(e.toString())); 
     return Files.walk(Paths.get(filePath)).collect(Collectors.toList()); 
    } 

quand j'exécute cette méthode, je ne vois que/tmp imprimé et retourné j'espérais voir tous les sous-répertoires et fichiers à l'intérieur

Javadocs dit

« Retour d'un flux qui est paresseusement peuplé de chemin en marchant l'arborescence de fichiers racine dans un fichier de départ donné. l'arborescence des fichiers est traversé en profondeur d'abord, les éléments du flux sont des objets de chemin obtenus comme si par resolvi ng le chemin relatif contre le départ. "

+0

Bien sûr, il y a des choses dans '/ tmp'? Vous avez la permission de lire des choses là-dedans? –

+0

@brainstorm try '/ private/tmp' peut être? (Au cas où vous êtes sur mac) – Eugene

+0

J'ai des contenus dans/tmp sur mac. Je peux faire 'ls/tmp' –

Répondre

3

C'est un lien symbolique, pas un vrai chemin:

Path p = Paths.get("/tmp"); 
System.out.println(Files.isSymbolicLink(p)); // returns true 

Le vrai chemin est /private/tmp

vous pouvez faire une

ls -l 

et de voir que certains des dossiers sont la propriété de _mbsetupuser utilisateur.

vous pouvez aussi marcher les liens symboliques comme suggérer dans les commentaires via:

Files.walk(Paths.get("/tmp"), FileVisitOption.FOLLOW_LINKS) 
+0

Ah ah, bon endroit. Peut-être mentionner ['FileVisitOptions.FOLLOW_LINKS'] (https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileVisitOption.html#FOLLOW_LINKS). –

+0

oui. Ça marche. mais malheureusement, l'un des fichiers/tmp/cvcd aboutit à AccessDeniedException, donc je n'ai pas de liste retournée. –

+0

@brainstorm J'ai modifié la réponse un peu – Eugene