当前位置: 首页 > 面试题库 >

如何在JDK7中使用目录遍历

秦奇
2023-03-14
问题内容

从文档和示例开始,我一直在尝试使用JDK7中的新globbing功能

我可以得到诸如"glob:*.dat"

Files.walkFileTree(startingDir, finder);

示例,但我一直无法使"**"语法正常工作。我希望能够创建如下内容:

matcher = FileSystems.getDefault().getPathMatcher("glob:" + "foo/**/bar/*.dat");

并感谢一个简单的例子。我正在使用Windows 7。

更新:@Oleg和@JBNizet清楚地表明“
/”语法与操作系统无关。请注意,Javadocs建议也可以使用与操作系统有关的语法(必需)。

仍然存在的问题:已经采用@Nizet并进行了如下编辑:

@Test
public void testStackoverflowGlobber() throws IOException {
    final PathMatcher matcher =
 FileSystems.getDefault().getPathMatcher("glob:*.cml");
        Files.walkFileTree(Paths.get("d:/petermr-workspace/jumbo-converters/jumbo-converters-cli/src/test/resources"), new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                System.out.println("try>> "+file);
                if (matcher.matches(file)) {
                    System.out.println("MATCHES>>"+file);
                }
                return FileVisitResult.CONTINUE;
            }
        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
        }
    });
}

这给出了如下输出:

try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdx
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdxml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.ref.cdxml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.ref.cml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cif\aa2004.cml

但没有匹配的证据


问题答案:

这是一个工作示例,显示以下任何后代目录中的所有zip文件d:/

public static void main(String[] args) throws IOException {
    final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:d:/**/*.zip");
    Files.walkFileTree(Paths.get("d:/"), new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            if (matcher.matches(file)) {
                System.out.println(file);
            }
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
        }
    });
}

如您所见,在Windows上可以使用正斜杠。



 类似资料:
  • 问题内容: 我在Linux上用bash编写脚本,需要遍历给定目录中的所有子目录名称。如何遍历这些目录(并跳过常规文件)? 例如: 给定目录是 它具有以下子目录: 我想检索A,B,C。 问题答案: 简短说明: 查找文件(很明显) 是当前目录,它位于is之后(恕我直言,它比直接包含在命令中更为灵活。如果要在此文件夹中执行更多操作,则只有一个位置可以更改,)。 并确保仅在当前目录中查找,并且不将自身包含

  • 我想从根目录导航到所有其他目录内,并打印相同的。 这是我的密码: 这是我的O/P: 上面的和是目录。 但是,我需要按以下方式打印O/P: 以上,和是目录,其余的是文件。

  • 问题内容: 我有一个目录日志文件。我想使用Python脚本处理此目录中的每个文件。 我该怎么做呢? 问题答案: 使用或,取决于您是否要递归执行。

  • 问题内容: 我需要获取目录中所有文件的列表,包括所有子目录中的文件。用Java完成目录迭代的标准方法是什么? 问题答案: 你可以用来测试给定的文件(路径)是否为目录。如果是true,则只需再次调用同一个方法及其结果即可。这称为递归。 这是一个基本的启动示例。 请注意,这对树的深度超过JVM堆栈可以容纳的深度很敏感。你可能要使用迭代方法或尾递归,但这是另一个主题;)

  • 问题内容: 我想使用Java处理某个目录中的每个文件。 最简单(也是最常见)的方法是什么? 问题答案: 如果目录名称位于中,

  • X1.4.0新增 sp_scan_dir($pattern,$flags) 功能: 替代scan_dir的方法 参数: $pattern:检索模式 搜索模式 .txt,.doc; (同glog方法) $flags:返回模式 同glog方法 返回: 类型数组 使用方法: //扫描application目录 $files=sp_scan_dir('application/*');//返回applic