0

所以我必须使用 Java 文件树系统,因为 .listfiles 文件由于某种原因在通过远程网络时速度非常慢。然而,所有 Java 文件树系统示例都列出了子目录中的所有文件,从而严重降低了程序速度。我怎样才能使它只搜索目录并只返回该目录而不是子目录中的文件夹和文件的名称。

示例代码:

package javaapplication6;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

/** Recursive listing with SimpleFileVisitor in JDK 7. */
public final class JavaApplication6 {

  public static void main(String... aArgs) throws IOException{
    String ROOT = "\\\\directory";
    FileVisitor<Path> fileProcessor = new ProcessFile();
    Files.walkFileTree(Paths.get(ROOT), fileProcessor);
  }

  private static final class ProcessFile extends SimpleFileVisitor<Path> {
    @Override public FileVisitResult visitFile(
      Path aFile, BasicFileAttributes aAttrs
    ) throws IOException {
      System.out.println("Processing file:" + aFile);
      return FileVisitResult.CONTINUE;
    }

    @Override  public FileVisitResult preVisitDirectory(
      Path aDir, BasicFileAttributes aAttrs
    ) throws IOException {
      System.out.println("Processing directory:" + aDir);
      return FileVisitResult.CONTINUE;
    }
  }
} 

任何见解或帮助将不胜感激,谢谢。

4

2 回答 2

0

使用目录流似乎更快速、更容易地工作。

于 2015-10-17T16:16:35.183 回答
0

walkFileTree使用允许您maxDepth像这样设置的方法的较长版本:

Files.walkFileTree(Paths.get(ROOT), EnumSet.noneOf(FileVisitOption.class),
   1, fileProcessor);

请注意,与更简单的情况不同,ROOT 的子目录将生成对visitFile. 更一般地,maxDepth 级别的子目录会生成对 and 的调用,visitFile但不会生成对preVisitDirectoryand的调用postVisitDirectory

于 2016-08-31T01:52:57.270 回答