如何在java.io.File中实现相同的功能;
List<File> List = (List<File>) FileUtils.listFilesAndDirs(directory,
TrueFileFilter.TRUE, TrueFileFilter.TRUE);
String fileID = f.getAbsolutePath().replaceAll(staticRoot, "");
重构为java.nio.file。*;
DirectoryStream<Path> List = Files.newDirectoryStream(Paths.get(directory));
String fileID = f.???
哪种方法将返回与java.io.File包相同的输出? 谢谢。
我尝试过
String fileID = f.toAbsolutePath().toString().replaceAll(staticRoot, "");
for (Path f : fList) {
String fileID = f.toAbsolutePath().toString().replaceAll(staticRoot, "");
System.out.println("file ID : " + fileID);
String parentID = null;
}
staticRoot = /home/test/dir1/dir10/test9.txt
结果应剪切为“ / home / test /”,并仅返回dir1 / dir10 / test9.txt
答案 0 :(得分:1)
由于FileUtils.listFilesAndDirs(directory, TrueFileFilter.TRUE, TrueFileFilter.TRUE)
将递归访问directory
中的所有子目录,因此您很可能希望用Files.walk(Path, FileVisitOption...)
方法将其替换。
通过遍历以给定起始文件为根的文件树,返回用Path懒散填充的Stream。文件树是深度优先遍历的,流中的元素是Path对象,就像通过相对于start解析相对路径获得的一样。
答案 1 :(得分:0)
给出一个表示/home/test/dir1/dir10/test9.txt
的j.n.f.Path对象,调用.getParent()
表示dir10。然后,如果您有一个表示/home/test/dir1/dir10/subdir1/subdir2/foo.txt
的路径,并且想将其转换为subdir1/subdir2/foo.txt
,则可以使用j.f.Path的relativize
方法来实现。不需要replace或replaceAll。
注意:您使用的replaceAll错误。 replaceAll将正则表达式作为第一个参数,将替换项作为第二个参数,并替换该正则表达式上的所有匹配项。 replace方法将字符串作为参数,将替换项作为第二个参数,并且..也将替换全部。鉴于您的staticRoot不是正则表达式,因此您使用了错误的调用。只是下一次课程。是的,名称令人困惑。