相关疑难解决方法(0)

Files.walk(),计算总大小

我正在尝试计算光盘上文件的大小.在java-7中,这可以使用Files.walkFileTree来完成,如我在这里的回答所示.

但是,如果我想使用java-8流来执行此操作,它将适用于某些文件夹,但不适用于所有文件夹.

public static void main(String[] args) throws IOException {
    long size = Files.walk(Paths.get("c:/")).mapToLong(MyMain::count).sum();
    System.out.println("size=" + size);
}

static long count(Path path) {
    try {
        return Files.size(path);
    } catch (IOException | UncheckedIOException e) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于路径,a:/files/c:/它会抛出异常

Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: c:\$Recycle.Bin\S-1-5-20
at java.nio.file.FileTreeIterator.fetchNextIfNeeded(Unknown Source)
at java.nio.file.FileTreeIterator.hasNext(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.LongPipeline.reduce(Unknown …
Run Code Online (Sandbox Code Playgroud)

java nio java-8 java-stream

21
推荐指数
3
解决办法
1万
查看次数

是否有一种解决方法可以解决Java在行走大型目录时表现不佳的问题?

我试图一次处理一个通过网络存储的文件.由于缓冲不是问题,因此读取文件很快.我遇到的问题只是列出文件夹中的目录.在许多文件夹中,每个文件夹至少有10k个文件.

由于File.list()返回数组而不是iterable,因此性能非常慢.Java关闭并收集文件夹中的所有名称,并在返回之前将其打包到数组中.

这个错误条目是http://bugs.sun.com/view_bug.do;jsessionid=db7fcf25bcce13541c4289edeb4?bug_id=4285834并且没有解决方法.他们只是说这已经为JDK7修复了.

几个问题:

  1. 有没有人解决这个性能瓶颈问题?
  2. 我想要实现不可能吗?即使它只是遍历目录,性能仍然会变差吗?
  3. 我可以使用测试版JDK7构建具有此功能,而无需建立在它在我的整个项目?

java performance directory-walk

17
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×2

directory-walk ×1

java-8 ×1

java-stream ×1

nio ×1

performance ×1