首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有java.nio.file*的目录和文件扫描器;

带有java.nio.file*的目录和文件扫描器;
EN

Stack Overflow用户
提问于 2019-01-08 19:42:41
回答 2查看 413关注 0票数 2

如何在java.io.File中实现相同的功能;

代码语言:javascript
复制
List<File> List = (List<File>) FileUtils.listFilesAndDirs(directory, 
                                    TrueFileFilter.TRUE, TrueFileFilter.TRUE);
String fileID = f.getAbsolutePath().replaceAll(staticRoot, "");

而重构到java.nio.file.*;

代码语言:javascript
复制
DirectoryStream<Path> List = Files.newDirectoryStream(Paths.get(directory));    
String fileID = f.??? 

什么方法会返回与java.io.File包中相同的输出?谢谢。

我试过了

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2019-01-08 19:52:00

由于FileUtils.listFilesAndDirs(directory, TrueFileFilter.TRUE, TrueFileFilter.TRUE)将递归地访问directory中的所有子目录,因此您很可能希望将其替换为Files.walk(Path, FileVisitOption...)方法。

返回一个流,它通过遍历以给定起始文件为根的文件树,懒惰地填充路径。首先对文件树进行深度遍历,流中的元素是路径对象,这些对象是通过解析start的相对路径获得的。

票数 2
EN

Stack Overflow用户

发布于 2019-01-08 20:29:54

给定一个表示/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方法来完成此操作。不需要替换或replaceAll。

注意:您使用的replaceAll是错误的。replaceAll将正则表达式作为第一个参数,将替换作为第二个参数,并替换该正则表达式上的所有命中内容。replace方法将字符串作为参数,将替换作为第二个参数,并..也会替换所有。假设您的staticRoot不是正则表达式,那么您使用的调用是错误的。只是给下一次上一课。是的,名字是令人困惑的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54091105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档