DescriptionÉvitez Java 8 Files.walk (..) La cause de l'arrêt de (java.nio.file.AccessDeniedException)
J'utilise Java Files.walk(..) compter .mp3
fichiers contenus dans un dossier et tous les dossiers à l'intérieur il . En d'autres termes, je visite tous les niveaux de l'arborescence de fichiers.
Lorsque je reçois java.nio.file.AccessDeniedException
le Stream
se ferme, je ne veux pas ce comportement. J'en ai besoin pour ignorer ou imprimer l'exception et continuer à compter les fichiers. Voici le code que j'utilise :):
/**
* Count files in a directory (including files in all sub
* directories)
*
* @param directory
* the directory to start in
* @return the total number of files
*/
public int countFiles(File dir) {
if (dir.exists())
try (Stream<Path> paths = Files.walk(Paths.get(dir.getPath()), FileVisitOption.FOLLOW_LINKS)) {
return (int) paths.filter(path -> {
// i am using something different here but i changed
// it just for the purpose of StackOverFlow question
return path.toString().contains(".mp3");
}).count();
} catch (IOException ex) {
//Main.logger.log(Level.WARNING, "", ex);
ex.printStackTrace();
}
return 0;
}
StackTrace of error:
java.io.UncheckedIOException: java.nio.file.AccessDeniedException: C:\$Recycle.B
in\S-1-5-18
at java.nio.file.FileTreeIterator.fetchNextIfNeeded(FileTreeIterator.java:88)
at java.nio.file.FileTreeIterator.hasNext(FileTreeIterator.java:104)
at java.util.Iterator.forEachRemaining(Iterator.java:115)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.jav
a:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
at java.util.stream.LongPipeline.sum(LongPipeline.java:396)
at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
at smartcontroller.SmartController$InputService$1.countFiles(SmartController.ja
va:2092)
...
Similar question , though not the same i need a Stream to be returned .
Working around access denied in a FileWalking Tree in Java7.
utiliser la version non-essayer avec-ressources dans le double lien vers vous –
@JarrodRoberson je dois obtenir un 'Stream', donc je peux utiliser des méthodes Java8. Pouvez-vous poster une réponse à ce sujet :)? – GOXR3PLUS
Votre code ne compile pas, à l'intérieur du bloc try il y a du code désordonné (un return et un count() qui ne font référence à rien). S'il vous plaît poster quelque chose de correct pour nous laisser vous aider correctement :) – Prim