当前位置: 首页 > 知识库问答 >
问题:

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

简烨烁
2023-03-14

所以我必须使用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个答案

梁丘琛
2023-03-14

使用较长版本的walkFileTree方法,该方法允许您设置maxDepth如下:

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

请注意,与简单情况不同,ROOT的子目录将生成对visitFile调用。一般来说,maxDepth级别的子目录生成对visitFile的调用,但不生成对preVisitDirectorypostVisitDirectory的调用。

姚星宇
2023-03-14

使用目录流似乎工作得更快更容易。

 类似资料:
  • 问题内容: 我想使用“文件类”从项目文件夹中获取文件,我该怎么办? 问题答案: 嗯,有很多不同的方法来获取Java文件,但这是一般要点。 不要忘记,您至少需要将其包装在a 中,因为File是其中的一部分,这意味着它必须具有try-catch块。 不是要解决Ericson的问题,而是如果您使用的是实际的软件包,则除非明确使用文件的位置,否则文件的位置将有问题。相对路径与Packages混为一谈。 即

  • 我想通过使用“文件类”从项目文件夹中获取文件,我如何做到这一点?

  • 问题内容: 如何在Java中检索文件夹或文件的大小? 问题答案: 如果文件不存在,则以字节为单位返回文件的长度。没有内置的方法来获取文件夹的大小,你将不得不递归遍历目录树(使用代表目录的文件对象的方法)并为自己积累目录大小: 警告:此方法不足以用于生产。可能返回并导致。另外,它不考虑符号链接,并且可能具有其他故障模式。

  • 问题内容: 我需要使用文件夹中文件的所有名称创建一个列表。 例如,如果我有: 我想将它们存储为 with 作为值。 用Java做到最好的方法是什么? PS:我在Mac OS X上 问题答案: 你可以这样做: 你只想获取JPEG文件还是所有文件?

  • 问题内容: 我在文档文件夹中获取文件名的代码有什么问题? 我以为我已正确阅读了文档,并且我对documents文件夹中的内容非常确定,但是“ fileList”没有显示任何内容?“目录”显示文件夹的路径。 问题答案: 此解决方案适用于 Swift 4 (Xcode 9.2)和 Swift 5 (Xcode 10.2.1+): 这是一个可重用的FileManager扩展,它还允许您跳过或在结果中包含

  • 问题 你想获取文件系统中某个目录下的所有文件列表。 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链接等等。 如果你需要通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导。比如: import os.pa