我正在使用Java 8Files.walk(..)来计算一个文件夹及其所有子文件夹中包含的
当我遇到
错误的堆栈跟踪:
.mp3
文件数量。换句话说,我正在访问文件树的所有级别。当我遇到
java.nio.file.AccessDeniedException
时,Stream
会关闭,但我不希望出现这种情况。我需要它忽略或打印异常并继续计数文件。以下是我使用的代码 :): /**
* 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;
}
错误的堆栈跟踪:
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)
...
类似的问题,尽管不完全相同,我需要返回一个流。
Stream
,这样我就可以使用Java8的方法。你能发一篇关于它的答案吗 :) ? - GOXR3PLUSfilter
内部的操作吗?还是来自于Files.walk
? - 4castleFile.walk(..)
。 - GOXR3PLUStry(Stream <Path> paths = Files.walk(Paths.get(dir.getPath(),FileVisitOption.FOLLOW_LINKS)))
,因此无论我做什么都会抛出异常。我需要在内部修复Files.walk(...)。 那么它可能是重复的,但不是您标记的那种重复...如果您有任何想法,请将其发布为答案。 - GOXR3PLUS