实验五 输入输出流
一、实验概述本次上机实验围绕 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 高级用法打下基础。

相关新闻

3分钟掌握:AcFunDown视频下载神器全方位使用指南

3分钟掌握:AcFunDown视频下载神器全方位使用指南

3分钟掌握:AcFunDown视频下载神器全方位使用指南 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown AcFunDown是一款专为…

2026/6/19 11:41:04阅读更多 →
在Ubuntu上深度剖析RK3288固件:从解包update.img到镜像重构全流程

在Ubuntu上深度剖析RK3288固件:从解包update.img到镜像重构全流程

1. 环境准备与工具链搭建 在开始拆解RK3288固件之前,我们需要在Ubuntu系统上搭建完整的工具链。我推荐使用Ubuntu 18.04或20.04 LTS版本,这两个版本对老工具链的兼容性最好。记得先执行sudo apt update && sudo apt upgrade更新系统,…

2026/6/19 11:41:04阅读更多 →
Claude 4.8 辅助后端排障实践:从错误日志到修复方案,再到测试用例

Claude 4.8 辅助后端排障实践:从错误日志到修复方案,再到测试用例

文章摘要:本文结合订单状态同步的排障案例,分享如何将 Claude 4.8 与 ChatGPT、Gemini、DeepSeek 等模型用于后端开发流程:先整理日志和调用链,再分析空指针、幂等性、状态流转等风险,生成局部修复建议和测试用例清单。…

2026/6/19 11:36:04阅读更多 →
应急响应优化:动态路网+建筑级定位+人机协同决策实战

应急响应优化:动态路网+建筑级定位+人机协同决策实战

1. 项目概述:这不是一次普通的流程优化,而是一场面向真实街巷的响应效率革命“Optimizing Emergency Response in Calgary”——这个标题乍看像一份市政报告的副标题,但在我过去十年跑遍加拿大西部十几个城市应急指挥中心、参与过三次省级应急…

2026/6/19 13:01:13阅读更多 →
混元图像3.0:工业级图生图的结构一致性与物理约束生成

混元图像3.0:工业级图生图的结构一致性与物理约束生成

1. 项目概述:这不是又一个“图生图”玩具,而是工业级图像生成能力的临界点 混元图像3.0发布那天,我正调试一个电商主图批量生成脚本,后台日志里突然刷出一串异常高的PSNR和LPIPS指标——不是模型跑崩了,是新模型把旧基…

2026/6/19 13:01:13阅读更多 →
OnlyOffice 定制开发实践:庭审场景下的主控端屏幕跟随功能实现

OnlyOffice 定制开发实践:庭审场景下的主控端屏幕跟随功能实现

在大多数人认知中,OnlyOffice 的协同编辑能力已经足够满足多人在线编辑场景。但当 OnlyOffice 被应用到法院庭审、远程听证、会议记录、指挥调度等专业场景时,会发现一个问题: 文档内容虽然实时同步了,但人员关注的位置并没有同步…

2026/6/19 13:01:13阅读更多 →
人脸与物体识别实战:从VGG16到双任务协同的工程落地

人脸与物体识别实战:从VGG16到双任务协同的工程落地

1. 项目概述:从人眼到机器之眼,一场关于“看见”的技术迁徙计算机视觉不是让机器拍照,而是让它真正“看懂”。我做这个方向快八年了,从最早用OpenCV写十几行代码检测红绿灯,到现在带团队落地工业质检系统,最…

2026/6/19 13:01:13阅读更多 →
AI红绿灯实时优化系统:轻量化光流+边缘状态机落地实践

AI红绿灯实时优化系统:轻量化光流+边缘状态机落地实践

1. 项目概述:当红绿灯开始“看懂”车流,城市路口就不再只是机械切换 “Smart Control of Traffic Lights Using AI”——这个标题乍看是句技术陈述,但背后藏着一个正在全球数十座城市悄然落地的现实:红绿灯正从“定时器”进化成“…

2026/6/19 13:01:13阅读更多 →
如何在5分钟内为你的浏览器添加本地AI助手:Page Assist完全指南

如何在5分钟内为你的浏览器添加本地AI助手:Page Assist完全指南

如何在5分钟内为你的浏览器添加本地AI助手:Page Assist完全指南 【免费下载链接】page-assist Use your locally running AI models to assist you in your web browsing 项目地址: https://gitcode.com/GitHub_Trending/pa/page-assist 你是否曾经希望在浏览…

2026/6/19 12:56:13阅读更多 →
Photobucket付费墙背后:5美元买童年回忆却落得一场空!

Photobucket付费墙背后:5美元买童年回忆却落得一场空!

1. 付费墙初现如今身处万亿市值公司林立的时代,我们也不能轻易放弃5美元。就像Photobucket,它曾相当于过去的Imgur,我们小时候常把图片上传到这个网站,然后在各种论坛上分享链接,它简单好用,尽职尽责。但最…

2026/6/19 0:04:37阅读更多 →
如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/6/19 0:04:37阅读更多 →
yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南 【免费下载链接】yuzu 项目地址: https://gitcode.com/GitHub_Trending/yuz/yuzu yuzu作为目前最流行的开源Nintendo Switch模拟器,不仅提供了完整的游戏运行环境,还内…

2026/6/19 0:04:37阅读更多 →