求助:统计目录中以03_开头的文件数量(代码执行失败)
解决Java统计指定前缀文件数量的问题
嘿,我来帮你搞定这个问题~你之前的代码失效是因为Java的Paths和Files.list()不支持直接解析通配符*——它会把/03_*当作一个字面量的路径名,而你的目录里根本没有叫03_*的文件/文件夹,所以自然得不到正确结果。
下面给你两种可行的解决方案,都是Java标准库的原生方法:
方法一:用Files.walk配合流式过滤
这种方法适合需要复杂过滤逻辑的场景,比如除了前缀还要判断文件类型、后缀等:
import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class FileCounter { public static void main(String[] args) { String parentDir = "/usr/local/mod_in"; try (Stream<Path> fileStream = Files.walk(Paths.get(parentDir), 1)) { // 1表示只遍历当前目录,不深入子文件夹 long cntSales = fileStream .filter(Files::isRegularFile) // 只统计普通文件,排除目录 .map(path -> path.getFileName().toString()) .filter(fileName -> fileName.startsWith("03_")) .count(); System.out.println(cntSales); // 这里会输出2 } catch (Exception e) { e.printStackTrace(); } } }
方法二:用DirectoryStream直接匹配通配符
如果只是简单的前缀匹配,这种方法更简洁高效,它原生支持通配符模式:
import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class FileCounter { public static void main(String[] args) { String parentDir = "/usr/local/mod_in"; Path dirPath = Paths.get(parentDir); long cntSales = 0; try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(dirPath, "03_*")) { for (Path file : dirStream) { // 可选:如果要排除目录,加上这个判断 if (Files.isRegularFile(file)) { cntSales++; } } System.out.println(cntSales); // 输出2 } catch (Exception e) { e.printStackTrace(); } } }
两种方法都能正确统计出你要的结果,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者abssab
相关产品推荐
相关产品推荐

