如何使用Java FileReader读取特定格式文本文件并提取5个参数
如何用Java的FileReader提取特定格式的数值?
嘿,这个需求其实很好实现,咱们一步步来拆解:首先用FileReader配合BufferedReader读取文件内容(后者能提升读取效率,还方便逐行处理),再通过正则表达式精准匹配出你需要的5个整数值。下面是具体的实现思路和可直接运行的代码示例:
核心步骤说明
- 读取文件:用
FileReader打开文件,再套一层BufferedReader逐行读取,避免一次性加载大文件占用过多内存。 - 正则匹配:针对你给出的格式
BB [FL:60 BT:10 SG:20 MK:10 | 12],我们可以用正则表达式FL:(\\d+) BT:(\\d+) SG:(\\d+) MK:(\\d+) \\| (\\d+)来匹配——每个括号里的分组就是我们要提取的整数。 - 提取数值:把匹配到的分组内容转换成
int类型,就能单独使用这些数值了。
完整代码示例
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FoodDataExtractor { public static void main(String[] args) { // 定义正则表达式,分组捕获需要的5个整数 String regexPattern = "FL:(\\d+) BT:(\\d+) SG:(\\d+) MK:(\\d+) \\| (\\d+)"; Pattern pattern = Pattern.compile(regexPattern); // 替换成你的实际文件路径 String targetFilePath = "your_food_data.txt"; // 使用try-with-resources自动关闭流,无需手动处理 try (BufferedReader reader = new BufferedReader(new FileReader(targetFilePath))) { String currentLine; // 逐行读取文件 while ((currentLine = reader.readLine()) != null) { Matcher matcher = pattern.matcher(currentLine); // 如果当前行符合目标格式 if (matcher.find()) { // 提取每个分组的数值并转换为整数 int flParam = Integer.parseInt(matcher.group(1)); int btParam = Integer.parseInt(matcher.group(2)); int sgParam = Integer.parseInt(matcher.group(3)); int mkParam = Integer.parseInt(matcher.group(4)); int cookDuration = Integer.parseInt(matcher.group(5)); // 这里可以根据你的需求处理这些数值,比如打印、存储到集合等 System.out.printf("提取结果:FL=%d, BT=%d, SG=%d, MK=%d, 制作时长=%d%n", flParam, btParam, sgParam, mkParam, cookDuration); } } } catch (IOException e) { // 处理文件读取时的异常,比如文件不存在、权限问题等 System.err.println("读取文件时发生错误:" + e.getMessage()); e.printStackTrace(); } } }
代码关键点解释
- try-with-resources:Java 7+的特性,会自动关闭实现了
AutoCloseable的资源(比如这里的BufferedReader和FileReader),不用手动写close()方法,避免资源泄漏。 - 正则分组:正则里的
\\d+匹配一个或多个数字,括号()把匹配内容标记为分组,后续用matcher.group(n)就能获取第n个分组的内容。 - 逐行处理:适合处理大文件,不会把整个文件加载到内存里,性能更优。
内容的提问来源于stack exchange,提问作者Sandaru Cooray
相关产品推荐
相关产品推荐

