在 Java 7 中,列出带有 "relative path" 的文件

In Java 7, list files with "relative path"

给定以下目录结构:

/dir1
/dir1/dir2
/dir1/dir2/file1
/dir1/dir2/file2
/dir1/dir2/dirA/file3

someFunction("dir2")

期望的输出:

dir2/file1
dir2/file2
dir2/dirA/file3

我正在使用 FileUtils.listFiles 和路径,然后是字符串操作,但想知道是否有更好的方法。只是看起来很复杂。

Unix 命令 find dir2 非常准确。

您有一个基本目录和一个 Collection<File>。您可以使用 Path.relativize 获取从一个到另一个的相对路径。

这个例子,给定 /dir1/dir1/foo/bar/baz,将导致 foo/bar/baz 没有任何脆弱的字符串操作:

import java.io.*;
import java.nio.file.*;

class Foo {
  public static void main(String[] args) throws Exception {
    Path base = Paths.get("/dir1");
    File f = new File("/dir1/foo/bar/baz");
    System.out.println(base.relativize(f.toPath()));
  }
}

因为您也在使用 Java 7 Path, you might as well use the Java 7 Files

static void someFunction(String dir) throws IOException {
    Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            System.out.println(file);
            return FileVisitResult.CONTINUE;
        }
    });
}

测试

someFunction("dir2");

输出(在Windows1

dir2\dirA\file3
dir2\file1
dir2\file2

1) 在 Linux 上,路径将使用正斜杠而不是反斜杠。