Использование файловой системы 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;
    }
  }
} 

Любое понимание или помощь будет принята с благодарностью, спасибо.

2 ответа

Использование потока каталогов работает быстрее и проще.

Используйте более длинную версию walkFileTree метод, который позволяет установить maxDepth вот так:

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

Обратите внимание, что в отличие от более простых случаев подкаталоги ROOT будут генерировать вызовы visitFile, В более общем смысле подкаталоги на уровне maxDepth генерируют вызовы visitFile но не звонки preVisitDirectory а также postVisitDirectory,

Другие вопросы по тегам