如何在BufferedReader中使用文件路径并读取指定目录下含audit的文件?
解决方案
你需要先遍历指定目录,筛选出名称包含“audit”的文件,再逐个读取文件内容。以下是修改后的代码,同时支持绝对路径和相对路径:
步骤说明
- 使用
File类定位目标目录 - 筛选出名称包含“audit”的文件(可选择是否区分大小写)
- 逐个打开文件,用
BufferedReader读取内容 - 用
try-with-resources语法自动关闭资源,避免手动遗漏
完整代码示例
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class AuditFileReader { public static void main(String[] args) throws IOException { // 替换为你的目标目录路径(绝对/相对路径都支持) String targetDirPath = "your/target/directory/path"; File targetDir = new File(targetDirPath); // 检查目录有效性 if (!targetDir.exists() || !targetDir.isDirectory()) { System.out.println("指定路径不是有效目录"); return; } // 筛选名称含"audit"的文件(区分大小写,不区分则加toLowerCase()) File[] auditFiles = targetDir.listFiles(file -> file.isFile() && file.getName().contains("audit") ); if (auditFiles == null || auditFiles.length == 0) { System.out.println("未找到名称包含audit的文件"); return; } List<String> allContents = new ArrayList<>(); // 逐个读取文件 for (File file : auditFiles) { try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line; while ((line = reader.readLine()) != null) { allContents.add(line); // 也可以直接打印当前行,不用先存到List里 // System.out.println(line); } System.out.println("=== 读取完成:" + file.getName() + " ==="); } catch (IOException e) { System.out.println("读取文件" + file.getName() + "失败:" + e.getMessage()); } } // 打印所有读取到的内容(如果之前没直接打印) System.out.println("\n所有文件内容汇总:"); for (String contentLine : allContents) { System.out.println(contentLine); } } }
关键细节
- 路径兼容:
targetDirPath可填绝对路径(如"C:/system/logs"或"/home/user/audit"),也可填相对路径(相对于项目根目录,如"./src/test/resources") - 筛选规则:默认区分大小写,若要忽略大小写,将筛选条件改为
file.getName().toLowerCase().contains("audit") - 资源安全:
try-with-resources会自动关闭BufferedReader,无需手动调用close(),避免资源泄漏 - 错误防护:增加了目录有效性检查、空文件列表提示,以及单文件读取失败的异常捕获,防止程序直接崩溃
内容的提问来源于stack exchange,提问作者Zee-bot404
相关产品推荐
相关产品推荐

