新闻详情

新闻详情

首页 / 资讯中心 / 详情

实验五 输入输出流

发布时间:2026/9/10 9:43:45来源:尧图网络
实验五 输入输出流
一、实验概述本次上机实验围绕 Java 输入输出字符流完成举重成绩自动统计工具分为两个核心类Fenxi.java负责文本数字提取求和AnalysisResult.java完成文件读取、成绩计算、结果追加写入文件全流程。通过缓冲字符流实现文本文件高效读写结合正则与字符串分割完成成绩数值解析完整落地文件 IO 业务场景。二、整体解题思路1. 需求拆解读取本地score.txt举重原始成绩文本逐行处理提取每行文字中所有数字支持小数成绩自动累加计算总成绩原始文本拼接总成绩后控制台打印将处理后的完整数据追加写入新文件socreAnalysis.txt多次运行不覆盖历史数据捕获 IO 读写异常保证程序健壮性。2. 分层实现思路1数值解析层Fenxi 工具类正则表达式[^0123456789.]匹配所有非数字、非小数点字符将所有无关字符统一替换为分隔符*使用StringTokenizer按分隔符拆分纯数字字符串循环转换为 double 类型累加返回该行总成绩。2文件 IO 业务层AnalysisResult 主类底层文件流FileReader读取源文件FileWriter(file,true)开启追加模式输出缓冲包装用BufferedReader、BufferedWriter封装底层文件流提供readLine()按行读取、newLine()换行等便捷方法循环逐行读取文件调用工具类计算总分拼接文本后输出控制台 写入目标文件流关闭读写完成手动关闭缓冲流释放资源异常捕获捕获IOException打印异常信息避免程序直接崩溃。3. 填空逻辑推导原题 4 处代码填空【代码 1】new FileWriter(fWrite, true)第二个参数 true 代表追加写入满足题目追加要求【代码 2】new BufferedWriter(out)缓冲输出流必须接收 Writer 子类对象做底层流【代码 3】new FileReader(fRead)文件字符输入流继承自 Reader 抽象类【代码 4】new BufferedReader(in)缓冲输入流包装 Reader实现按行读取。三、完整示例代码1. Fenxi.java数字解析工具类import java.util.*; public class Fenxi { public static double getTotalScore(String s) { //匹配所有非数字字符 String regex[^0123456789.]; String digitMesss.replaceAll(regex,*); StringTokenizer fenxi new StringTokenizer(digitMess,*); double totalScore0; while(fenxi.hasMoreTokens()){ double score Double.parseDouble(fenxi.nextToken()); totalScore totalScorescore; } return totalScore; } }2. AnalysisResult.java文件读写主程序import java.io.*; import java.util.*; public class AnalysisResult { public static void main(String args[]) { File fRead new File(score.txt); File fWrite new File(socreAnalysis.txt); try { //【代码1】追加模式文件字符输出流 Writer out new FileWriter(fWrite, true); //【代码2】缓冲输出流包装 BufferedWriter bufferWrite new BufferedWriter(out); //【代码3】文件字符输入流 Reader in new FileReader(fRead); //【代码4】缓冲输入流包装 BufferedReader bufferRead new BufferedReader(in); String str null; while((strbufferRead.readLine())!null) { double totalScoreFenxi.getTotalScore(str); str str 总成绩:totalScore; System.out.println(str); bufferWrite.write(str); bufferWrite.newLine(); } //关闭流 bufferRead.close(); bufferWrite.close(); }catch(IOException e) { System.out.println(e.toString()); } } }3.score.txt4.运行结果四、程序创新点通用数字提取工具解耦业务逻辑将数字提取、求和逻辑封装独立工具类Fenxi和文件 IO 操作完全分离后续任何文本数字统计场景可直接复用符合单一职责设计思想。兼容整数 / 小数成绩修复原代码正则缺陷原题原始正则仅匹配纯数字未包含小数点会导致小数拆分错误优化正则[^0123456789.]完美适配带小数点的举重成绩覆盖真实业务数据。追加写入模式支持多次迭代统计使用FileWriter(file,true)开启文件追加重复运行程序不会覆盖已有统计结果适合分批录入成绩、持续汇总的使用场景。缓冲流分层包装兼顾性能与易用性底层使用基础文件流操作磁盘上层缓冲流封装readLine()、newLine()等便捷 API相比原生单字符读写大幅提升大文本文件读写性能。文本无关性解析不限制文本格式无需固定文本分隔符无论文字、符号如何混杂均可自动过滤所有非数字内容提取分数不局限于举重成绩单可拓展到成绩单、账单、日志等数字提取场景。五、实验心得体会1. 技术知识点收获分清字节流与字符流适用场景处理中文文本文件优先使用Reader/Writer字符流避免中文乱码图片、视频等二进制文件才使用InputStream/OutputStream字节流。缓冲流是 IO 优化核心基础文件流单次读写效率极低BufferedReader/BufferedWriter内置缓冲区批量读写磁盘处理多行文本必须使用。文件追加写入关键FileWriter第二个布尔参数控制覆盖 / 追加模式日常日志、统计记录业务几乎都使用追加模式。正则在文本清洗的实用价值面对混杂文字和数字的不规则文本正则可以快速过滤无关字符简化数据提取流程省去复杂字符串截取逻辑。IO 资源释放规范文件流属于操作系统资源使用完毕必须手动close()关闭否则会占用文件句柄导致文件无法修改、删除。2. 踩坑总结最初未注意正则缺失小数点带小数成绩会解析报错修正正则后程序才能正常运行忘记在写入文件后调用newLine()所有输出内容会挤在同一行可读性极差流关闭顺序错误必须先关闭上层缓冲流再关闭底层文件流缓冲流关闭时会自动刷新缓冲区数据到磁盘未捕获 IO 异常直接编译报错所有文件读写操作都属于受检异常必须搭配try-catch或抛出异常。3. 拓展思考本次程序还有优化空间可以使用 try-with-resources 语法自动关闭流省去手动close()增加文件不存在判断提前提示用户创建score.txt封装配置文件名常量方便修改文件路径增加总分排序、平均分统计等拓展功能。通过本次 IO 实验我理解了 Java 文件操作的分层设计思想底层基础流负责硬件交互上层装饰流拓展功能这种装饰者模式也为后续学习 IO 高级用法打下基础。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

YOLO目标检测实战调试手册:从原理到工业部署 2026/9/11 3:45:58

YOLO目标检测实战调试手册:从原理到工业部署

1. 这不是又一篇“YOLO入门科普”,而是一份目标检测从业者的现场笔记你点开这篇,大概率正卡在三个地方:第一,看完了十篇“YOLO是什么”的文章,还是说不清它和传统图像识别到底差在哪;第二,下载了…

阅读更多 →
基于SpringBoot的互动式教学平台设计与实现全解析 2026/9/11 3:45:58

基于SpringBoot的互动式教学平台设计与实现全解析

带了不少毕业设计项目,我越来越觉得“基于SpringBoot的互动式教学平台”这类题目被选中的频率高,确实是有原因的。它的功能边界清晰,学生、教师、管理员三类角色天然就能把权限管理讲清楚;业务场景丰富,课程、作业、问…

阅读更多 →
MySQL递归查询实战:处理层级数据的完整指南 2026/9/11 3:45:58

MySQL递归查询实战:处理层级数据的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SystemInformer中文界面教程:3步把英文界面改成中文 2026/9/11 3:45:58

SystemInformer中文界面教程:3步把英文界面改成中文

SystemInformer中文界面教程:3步把英文界面改成中文 【免费下载链接】systeminformer A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars & Solutions,…

阅读更多 →
AlphaFold 蛋白质结构可视化:3行代码从序列到 3D 图 2026/9/11 3:45:58

AlphaFold 蛋白质结构可视化:3行代码从序列到 3D 图

AlphaFold 蛋白质结构可视化:3行代码从序列到 3D 图 【免费下载链接】alphafold Open source code for AlphaFold 2. 项目地址: https://gitcode.com/GitHub_Trending/al/alphafold 拿到一条氨基酸序列后,通常还需要一张蛋白质结构可视化图&#…

阅读更多 →
G-Helper使用教程:5分钟搞定华硕笔记本的性能模式、显卡切换与风扇曲线 2026/9/11 3:42:57

G-Helper使用教程:5分钟搞定华硕笔记本的性能模式、显卡切换与风扇曲线

G-Helper使用教程:5分钟搞定华硕笔记本的性能模式、显卡切换与风扇曲线 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivob…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞