能否使用同一个BufferedReader读取清单文件中各文件的内容?
解决用BufferedReader读取清单文件及对应内容的问题
早上好呀!我明白你的困惑了——你已经写完了作业,但没贴合教授要求的精确结构,而且自己对代码的逻辑也没完全吃透对吧?别担心,我来帮你把这个流程理清楚,给你一个符合要求的示例代码,每一步我都会讲得明明白白~
首先先明确咱们的核心需求:
使用BufferedReader读取Manifest.txt清单文件,再依次读取该文件中列出的每个目标文件的内容(比如Manifest里写了File1.txt、File2.txt,就要分别读出这两个文件里的内容)
符合要求的完整代码示例
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.nio.charset.StandardCharsets; public class ManifestFileReader { public static void main(String[] args) { // 清单文件的路径,这里假设和项目根目录在同一位置 String manifestFilePath = "Manifest.txt"; // 第一步:读取清单文件里的所有文件名 // 用try-with-resources自动关闭流,避免资源泄漏(Java 7+支持) try (BufferedReader manifestReader = new BufferedReader( new FileReader(manifestFilePath, StandardCharsets.UTF_8))) { String targetFileName; // 逐行读取清单,直到没有更多行(readLine()返回null) while ((targetFileName = manifestReader.readLine()) != null) { // 跳过空行,避免读取无效的文件名 String trimmedFileName = targetFileName.trim(); if (trimmedFileName.isEmpty()) { continue; } System.out.println("\n--- 正在读取文件:" + trimmedFileName + " ---"); // 第二步:读取当前目标文件的内容 try (BufferedReader contentReader = new BufferedReader( new FileReader(trimmedFileName, StandardCharsets.UTF_8))) { String contentLine; // 逐行读取目标文件内容并输出 while ((contentLine = contentReader.readLine()) != null) { System.out.println(contentLine); } } catch (IOException e) { // 单个文件读取失败时的提示,不影响其他文件 System.err.println("读取文件 " + trimmedFileName + " 出错:" + e.getMessage()); } } } catch (IOException e) { // 清单文件本身读取失败的提示 System.err.println("读取清单文件 " + manifestFilePath + " 出错:" + e.getMessage()); } } }
代码逐行解释,帮你吃透每一部分
- try-with-resources语法:这是非常规范的IO操作写法,它会在代码块结束后自动关闭BufferedReader,不用你手动写
close(),能有效避免资源泄漏问题。 - 读取清单文件:用
manifestReader.readLine()逐行读取,每一行就是一个目标文件的名字。这里加了trim()和空行判断,是为了避免清单里有空格或者空行导致的无效读取。 - 读取目标文件:拿到有效的文件名后,我们新建一个
BufferedReader专门读取这个文件的内容,同样用逐行读取的方式输出。 - 异常处理:把清单文件和单个目标文件的异常分开处理,这样就算某个目标文件找不到或者读失败,其他文件还能正常读取,而且错误提示会明确告诉你是哪个文件出了问题,方便排查。
额外注意事项
- 文件路径:如果目标文件不在项目根目录,记得写完整的相对路径(比如
"data/File1.txt")或者绝对路径(比如"C:/projects/homework/File1.txt")。 - 编码问题:代码里指定了
StandardCharsets.UTF_8,如果你的文件用了其他编码(比如GBK),替换成对应的编码即可,避免中文乱码。
内容的提问来源于stack exchange,提问作者panasconnie
相关产品推荐
相关产品推荐

