【Java】输入输出流(实验八)

目录

一、实验目的

二、实验内容

三、实验小结


一、实验目的

1、掌握java I/O的基本原理。

2、掌握标准输入输出流和Scanner类的基本使用方法。

3、掌握FileInputStream、FileOutStream、FileReader、FileWriter、BufferedReader 、BufferedWriter类的常用方法。

二、实验内容

1、从键盘输入多行字符串(以单行“#”结束输入),存入指定文件,再从文件中读取内容输出到屏幕。

算法描述及实验步骤:

首先创建两个字符底层输入输出流,然后再使用已创建的两个底层流来创建两个缓冲输入输出流,从而实现字符串的行的读写。

创建Scanner扫描器对象并结合while循环,实现用户每从键盘输入一行字符串就将其输出到文件中,当用户输入的是“#”时则结束输出。

③ 然后使用缓冲输入流结合while循环在从文件中读取每行数据,直到读取的字符串为null时结束循环读取,并且在读取过程中,每从文件读取一行数据就将其输出显示到控制台。

④ 最后关闭上层和底层流。

源代码:

 实验运行截图:

 

2、解析一个文件中的价格数据,并计算平均价格,该文件的内容如下:

商品列表:

电视机,2567/台

洗衣机,3562/台

冰箱,6573/台

算法描述及实验步骤:

① 为了能解析出文件中的价格数据,可以使用Scanner类并结合正则表达式来获取文件中的价格数据。

② 使用while循环来将Scanner对象中封装的所有价格以累加的方式求和,并记录价格单词的个数

③ 根据保存的价格总和个数求出平均值并输出。

源代码:

实验运行截图:

 

三、实验小结

1、输入流将文件或者缓存中的数据读入到内存即程序,而输出流是将程序中的数据输出到文件或缓冲区等。根据读写数据方式的不同输入输出流在java中对应着不同的类对象即流类。

2、使用File类可以创建一个文件对象,此文件对象可以指向一个存在或者不存在的文件或者目录;通过此对象可以获取文件的元数据信息,以及创建其指向的文件或者目录、删除文件目录等。

3、使用Runtime.getRuntime()方法可以获得一个Runtime对象,此对象调用“对象.exec(cmd命令)”可以像cmd一样运行系统命令打开电脑程序。

4、文件字节输入输出流对象是以字节为依据来读写数据。可以使用FileInputStream类创建字节输入流并用read()放法将文件中的数据读入到指定的字节数组中,FileOutputStream类创建字节输出流并可以使用write()方法可以将程序中的字节数组元素数据输出到文件中。

5、文件字符输入和输出流是以字符为依据来读写数据。可以使用FileReader类创建字符输入流并使用read()方法将文件中的数据读入到程序字符数组中;使用FileWriter类创建字符输出流并使用write()方法可以将程序中的字符数组数据输出到指定文件中。

6、缓冲流可用于读写字符串到程序或者文件中。使用BuffferedReader类结合底层字符输入流可以创建一个高层缓冲输入流对象,使用此对象的readLine()方法可以读取文件中的数据并以字符串的形式返回。使用BufferedWriter类结合底层字符输出流可以创建高层的缓冲输出流对象,使用此对象的write()方法可以将程序中的字符串写入到文件中。

7、RandomAccessFile类使用”文件名,读写模式”形式的构造方法可以创建随机流。创建随机流时不会清空已存在的文件内容而字节、字符输出流默认会清空文件内容;随机流类似于其它语言中文件的读写方式,其随机流有很多的读写方法,使用随机流可以同时实现对文件的读写操作。

8、数组流对象可以将内存缓冲区中的数据读入到字节或者字符数组中,将字节或者字符数组中的数据写入到内存缓冲区。使用ByteArrayInpoutStream类结合字节数组可以创建数组子节输入流对象并使用read()方法将其指向的数据源读写到指定的字节数组中。使用ByteArrayOutputStream类可以创建数组字节输出流对象并使用write()方法可以将其指向的数据源写入到内存缓冲区,可以使用字节数组输出流对象的toByteArray()方法来获取向内存缓冲区写入的全部数据并以数组的形式返回。字符数组流的用法与字节数组流的用法类似。

9、使用数据流对象可以实现以指定数据类型的方式来读写文件。DataInputStream输入数据流类结合文件字节输入流(FileInputStream类)可以创建输入数据流对象。DataOutputStream数据输出流类结合文件字节输出流类可以创建输出数据流对象。数据流类的读写文件方法跟随机流对象一样有很多。

10、对象流结合文件字节输入输出流可以实现将序列化对象(实现了Serializable接口的类创建的对象)的信息写出保存到文件中,并从文件中以克隆对象的方式读入保存在文件中的序列化对象信息来生成新的克隆对象并返回。对象输入流类为ObjectInputStream,对象输出流类为ObjectOutputStream。对象输出流结合字节数组输出流可以将序列化对象的信息保存到内存缓冲区,然后使用对象输入流结合字节数组输入流来得到序列化对象的克隆。

11、使用Scanner扫描器对象结合文件可以实现对文件内容的分析,即使用”对象.useDelimiter(正则)”正则表达式来分割扫描器中封装的文件字符串;并使用其next()等方法获取扫描器中分割后的字符串单词。使用while循环结合hasNext()等方法判断扫描器中的字符串单词是否读写完,如果还有数据(不为空格),则返回真,没有数据(空格)返回假。

12、使用javax.imageio包中的ImageIo()类提供的static静态方法read(File)可以获取一个BufferedImage对象,即将文件图像读入到内存,BufferedImage对象调用createGraphics()方法可以获取一个Graphics2D对象,用户使用Graphics2D绘画对象中的方法可以对读入到内存中的渲染图象进行编辑;使用ImageIo.write(RenderedImage, String,File)方法可以将BufferedImage对象中封装的渲染图片以String类型指定的格式,保存到File类对象指向的文件中。

13、使用javax.swing包中的JFileChooser类可以创建一个不可见的、有模式的文件对话框对象。使用文件对话框,用户可以保存文件到磁盘和读取电脑上的文件内容到程序;文件对话框对象调用showSaveDialog(组件)可以在指定组件上弹出保存文件对话框,其对象调用showOpendialog(组件)可以在组件上弹出打开文件对话框。

14、使用javax.swing包下的ProgressMonitorInputStream类的(组件,字符串,文件字节输入流)构造方法创建的输入流对象,在程序读“FILE对象”文件时将自动在“组件”上面弹出一个进度条对话框,并在进度条上显示“字符串”指定的标语。

15、多个程序同时读写文件时可能会破环文件内容的完整性,使用文件锁可以避免多个程序同时读写一个文件。文件锁就是给文件上把锁,使所有程序包括生成文件锁在内的随机流都无法对文件锁锁住的文件进行操作,除非文件锁对象调用release()方法主动释放掉文件锁。使用文件锁的步骤:

①使用RandomAccessFile类创建读写随机流对象

②随机流调用getChannel()放法获取一个与要上锁的文件有关的FileChannel文件信道类的对象。

③文件信道对象调用tryLock()或lock()方法对其关联的文件上锁,并返回FileLock文件锁对象。

④文件锁对象使用release()方法可以对信道关联的文件进行解锁。解锁后所有程序才能操作该文件。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2806092.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

从源码学习单例模式

单例模式 单例模式是一种设计模式,常用于确保一个类只有一个实例,并提供一个全局访问点。这意味着无论在程序的哪个地方,只能创建一个该类的实例,而不会出现多个相同实例的情况。 在单例模式中,常用的实现方式包括懒汉…

创建一个基于Node.js的实时聊天应用

在当今数字化社会,实时通讯已成为人们生活中不可或缺的一部分。无论是在社交媒体平台上与朋友交流,还是在工作场合中与同事协作,实时聊天应用都扮演着重要角色。与此同时,Node.js作为一种流行的后端技术,为开发者提供了…

Linux修改shell工具连接端口

nano /etc/ssh/sshd_config 或者 vi /etc/ssh/sshd_config 或者 vim /etc/ssh/sshd_config

2024最新版(黑客技术)零基础入门自学网络安全

一、自学网络安全学习的误区和陷阱 1.不要试图先以编程为基础的学习再开始学习 我在之前的回答中,我都一再强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而且实际向安全过渡后可用到的关键知识并不…

如何连接ACL认证的Redis

点击上方蓝字关注我 应用程序连接开启了ACL认证的Redis时与原先的方式有差别,本文介绍几种连接开启ACL认证的Redis的Redis的方法。 对于RedisACL认证相关内容,可以参考历史文章: Redis权限管理体系(一):客户端名及用户…

AIGC 实战:Ollama 和 Hugging Face 是什么关系?

Ollama和 Hugging Face 之间存在着双重关系: 1. Ollama是 Hugging Face 开发并托管的工具: Ollama是一个由 Hugging Face 自行开发的开源项目。它主要用于在本地运行大型语言模型 (LLM),特别是存储在 GPT 生成的统一格式 (GPT-Generated Un…

【Java程序设计】【C00296】基于Springboot的4S车辆管理系统(有论文)

基于Springboot的4S车辆管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的4S店车辆管理系统 本系统分为销售员功能模块、管理员功能模块以及维修员功能模块。 管理员功能模块:管理员登录进入4S…

招聘APP开发实践:技术选型、架构设计与开发流程

时下,招聘APP成为了企业和求职者之间连接的重要纽带。本文将深入探讨招聘APP的开发实践,重点关注技术选型、架构设计以及开发流程等关键方面,带领读者走进这一充满挑战与机遇的领域。 一、技术选型 在开始招聘APP的开发之前,首…

MacOs 围炉夜话

文章目录 一、安装 Mac 一、安装 Mac macOS是一套由苹果开发的运行于Macintosh系列电脑上的操作系统。macOS是首个在商用领域成功的图形用户界面操作系统。 VM虚拟机怎么安装mac os?(全教程) 虚拟机:VMware Workstation 17 pro W…

解锁创意灵感,探索FlutterExampleApps项目的奥秘

解锁创意灵感,探索FlutterExampleApps项目的奥秘 项目简介 FlutterExampleApps项目是一个包含各种示例应用链接的仓库,旨在演示Flutter应用开发中的各种功能、特性和集成。 项目包含了以下几个部分,每个部分都涵盖了不同的内容和主题&…

HTML5和CSS3提高

一、HTML5的新特性 增加了一些新的标签,新的表单,新的表单属性,IE9以上版本的浏览器才支持 注意: 这些语义化标准主要针对搜索引擎的 新标签可以使用多次 在IE9中需要把这些元素转化为块级元素 新增的多媒体标签 主要包含两个…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

【Vue渗透】Vue Devtools 浏览器插件

下载地址 Vue Devtools 浏览器插件 Vue站点渗透思路 【Vue渗透】Vue站点渗透思路 简介 Vue Devtools 是 Vue 官方发布的调试浏览器插件,可以安装在 Chrome 和 Firefox 等浏览器上,直接内嵌在开发者工具中,使用体验流畅。Vue Devtools 由…

私域运营-需要认清的事实

一、私域不能单纯依靠微信渠道 误区:很多企业仍停留在如何让用户在微信去分享裂变,然后带动新用户的阶段。 私域的核心在于“开源节流”,就是如何通过更多渠道获取更多客户,并且避免客户的批量流失。 私域讲究的是如何从公域的“…

ETL:数据转换与集成的关键过程

ETL:数据转换与集成的关键过程 在现代数据驱动的世界中,有效地管理和处理数据对于企业的成功至关重要。ETL(提取、转换、加载)是一种关键的数据处理过程,有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

电商数据API接口 | 节省你的电商数据采集成本

1、将数据采集的整体成本降低55%。在电商API接口负责了整个数据采集流程后,这家电商公司成功节约了维护和开发上的成本。 2、电商爬虫API可以从极复杂的来源中采集数据,确保完整交付。在电商爬虫API的帮助下,该公司现在可以获取完成业务目标所…

MySQL数据库调优之关联查询、排序查询、分页查询、Group by优化

关联查询优化 1.准备工作 CREATE TABLE IF NOT EXISTS type(id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,card INT(10) UNSIGNED NOT NULL,PRIMARY KEY(id));CREATE TABLE IF NOT EXISTS book( bookid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, card INT(10) UNSIGNED N…

JavaSE-04笔记【面向对象01】

文章目录 1. final 关键字1.1 采用final修饰的类不能被继承1.2 采用 final 修饰的方法不能被覆盖1.3 采用 final 修饰的变量(基本类型)不能被修改1.4 采用final 修饰的变量必须显示初始化1.5 如果修饰的引用,那么这个引用只能指向一个对象,也就是说这个引…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令(texlive、mitex自带)。 在cmd中进入到eps矢量图片的目录,使用下面的命令: for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码: import matplotlib.pyplot as…

STP基本计算过程——选举非根交换机的根端口(二)

点赞关注,持续更新STP专题 选举非根交换机的根端口 1.STP为每个非根交换机选举根端口(Root Port)。 2. 交换机的每个端口都有一个端口开销(Port Cost)的参数,此参数表示数据从该端口发送时的开销值&#x…