用Java递归列出目录中的所有文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (136)

我有这个函数递归地打印目录中所有文件的名称。问题是我的代码非常慢,因为每次迭代都必须访问远程网络设备。

我的计划是首先递归地加载目录中的所有文件,然后使用正则表达式遍历所有文件,以过滤掉所有不需要的文件。有没有人有更好的建议?

public static printFnames(String sDir){
  File[] faFiles = new File(sDir).listFiles();
  for(File file: faFiles){
    if(file.getName().matches("^(.*?)")){
      System.out.println(file.getAbsolutePath());
    }
    if(file.isDirectory()){
      printFnames(file.getAbsolutePath());
    }
  }
}

这只是稍后的一个测试,我不打算使用这样的代码,而是将每个匹配高级正则表达式的文件的路径和修改日期添加到数组中。

提问于
用户回答回答于

假设这是实际的生产代码,你会写,那么我建议使用解决这样的事情这已经得到解决- 阿帕奇百科全书IO,具体FileUtils.listFiles()。它处理嵌套的目录,过滤器(基于名称,修改时间等)。

例如,对于你的正则表达式:

Collection files = FileUtils.listFiles(
  dir, 
  new RegexFileFilter("^(.*?)"), 
  DirectoryFileFilter.DIRECTORY
);

这将递归搜索与^(.*?)正则表达式匹配的文件,并将结果作为集合返回。

值得注意的是,这不会比滚动你自己的代码快,它也在做同样的事情 - 用Java拖网文件系统的速度很慢。不同之处在于,Apache Commons版本中没有任何错误。

热门问答

腾讯会议共享屏幕,其他人收到的是黑屏?

腾讯云音视频 支持 移动端h5吗( 不是小程序的)?

shixin

腾讯 · 高级产品经理 (已认证)

推荐

实时音视频TRTC的Web版是基于WebRTC的方案,需要浏览器的对WebRTC的支持,支持WebRTC的浏览器就可以。但是,移动端浏览器对WebRTC支持的情况并不好,建议使用小程序版。

如何用命令修改腾讯云解析目标ip?

氧化先生道可道 非常道 名可名 非常名
推荐
可以,参考: https://cns.api.qcloud.com/v2/index.php? &<公共请求参数> &Action=RecordCreate &domain=qcloud.com &subDomain=www &recordType=A &recordLine=默...... 展开详请

组队匹配完整流程是怎样的?感觉缺少API支持?

您好,matchgroup匹配成功后,小组成员会进入同一个房间和同一个队伍,这个API需要传玩家ID,通过邀请好友进房间就能拿到玩家的id,解散房间后再调用matchgroup,在没有解散房间不能调用matchGroup 接口。

SCF使用了k8s或docker容器技术吗?

Mason-Serverless

腾讯 · 产品经理 (已认证)

推荐

SCF的新架构使用的轻量化虚拟机技术,同时MVM里内嵌的有docker,但是没有使用K8S

腾讯云IoT物联平台中如何自定义Topic?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐已采纳
第二个是物联网通信平台(IoT Hub)的,https://cloud.tencent.com/document/product/634/32546。目前物联网开发平台(IoT explorer)只支持基于数据模板协议的接入(文档 https://cloud.tencent.co...... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券