使用 Java 的文件树系统仅获取文件和文件夹而不是子目录



所以我必须使用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;
    }
  }
} 

如有任何见解或帮助,不胜感激。

使用目录流似乎更快速,更容易。

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

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

注意,与更简单的情况不同,ROOT的子目录将生成对visitFile的调用。更常见的是,maxDepth级别的子目录生成对visitFile的调用,但不生成对preVisitDirectorypostVisitDirectory的调用。

相关内容

  • 没有找到相关文章

最新更新