簡體   English   中英

使用Java的文件樹系統僅獲取文件和文件夾,而不獲取子目錄

[英]Using Java's file tree system to get only files and folders not subdirectories

因此,我必須使用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調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM