给定以下目录结构:

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


someFunction(“ dir2”)

所需的输出:

dir2/file1
dir2/file2
dir2/dirA/file3


我正在使用FileUtils.listFiles和Paths,然后使用String操作,但是想知道是否有更好的方法。只是似乎令人费解。

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()));
  }
}

10-06 09:36