我使用的是Java8Files.Walk(..)计数文件夹中包含的.mp3
文件及其内的所有文件夹。换句话说,我正在访问文件树的所有级别。
当我获得java.nio.file.AccessDeniedException
关闭流
时,我不希望出现这种行为。我需要它来忽略或打印异常并继续计数文件。下面是我使用的代码:):
/**
* 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)
...
处理Java7中文件遍历树中拒绝的访问。
这里有一个临时解决方案,可以对其进行改进,以使用Java8 Streams和Lambdas。
int[] count = {0};
try {
Files.walkFileTree(
Paths.get(dir.getPath()),
new HashSet<FileVisitOption>(Arrays.asList(FileVisitOption.FOLLOW_LINKS)),
Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
System.out.printf("Visiting file %s\n", file);
++count[0];
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException e)
throws IOException {
System.err.printf("Visiting failed for %s\n", file);
return FileVisitResult.SKIP_SUBTREE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs)
throws IOException {
System.out.printf("About to visit directory %s\n", dir);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
// handle exception
}
问题内容: 我正在使用 Java 8 Files.walk(..)来计算一个文件夹中包含的文件以及其中的所有文件夹。换句话说,我正在访问文件树的所有级别。 当我得到的关闭,我不希望这种行为。我需要它忽略或打印异常并继续计数文件。以下是我使用的代码:): 错误的StackTrace: 类似的问题, 尽管不尽相同 , 但我需要返回Stream 。 问题答案: 这是一个临时解决方案,可以改进以使用Jav
我正在对一个拥有7000万行和25个数字特征的训练集使用R内部的< code>H2O库来尝试一个随机森林分类模型。总文件大小为5.6 GB。 验证文件的大小为 1 GB。 我的系统上有16 GB RAM和8核CPU。 系统成功读取H2O对象中的两个文件。 然后我发出以下命令来构建模型: 但是几分钟后(没有生成任何树),我得到以下错误: "在. h2o.doSafeREST(conn = conn,
问题内容: 我遇到的问题是,有时我启动的线程在调用它之前就完成了。看来这使我的程序等待不再发生的事情()。如何确保不等待线程完成? 问题答案: 如果您阅读JavaDocs for Thread,它将告诉您 永远不要在Thread对象上使用。您应该使用join()
此问题是之前问题的后续:使用Streams添加BigDecimals 这个问题与使用Java8和Lambda表达式添加有关。在实现给出的答案后,我遇到了另一个问题:每当流为空时,方法都会抛出一个。 考虑下面的代码: 香草Java代码对空集合没有问题,但是新的Java8代码有问题。 在这里避免NSEE最优雅的方式是什么?当然,我们可以做到: 但是有没有一种Java的方法来处理空集合?
IConeable 听起来是一个很不错的想法:你类型实现了 IConeable 接口然后就支持复制。如果你不想要支持复制,你就不需要实现它。但是你的类型不能在真空中存在。你支持 IConeable 的决定会影响它的子类。一旦一个类型支持 ICloneable ,它的所有子类也都必须支持 ICloneable 。它的所有成员的类型都必须支持 ICloneable 或者有其他机制去复制。最后,如果支持
问题内容: 我可以在不生成编译的.pyc文件的情况下运行python解释器吗? 问题答案: 来自“ Python 2.6的新增功能- 解释器更改” : 现在,可以通过向Python解释器提供-B开关,或者通过在运行解释器之前设置 PYTHONDONTWRITEBYTECODE环境变量来阻止Python编写.pyc或.pyo文件。此设置可作为Python程序的 变量使用,并且Python代码可以更改