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

news2024/12/22 13:57:59

目录

一、实验目的

二、实验内容

三、实验小结


一、实验目的

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://www.coloradmin.cn/o/1467744.html

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

相关文章

电商行业网络安全——守护数字世界的交易安全与信任

随着互联网的迅猛发展,电子商务行业在全球范围内呈现出爆炸性增长的态势。然而,伴随着网络交易的便捷性,网络安全问题也愈发凸显,成为电商行业必须严肃面对的挑战。在这个数字化、信息化的时代,电商行业的网络安全不仅…

v-rep插件

v-rep官网插件汉化教程 官网教程 插件是什么 插件本质上就是遵循一定规范的API编写出来的程序,在v-rep中最终需要编译为动态库。 linux下是libsimXXXX.so; 其中XXXX是插件的名称。 请至少使用4个字符,并且不要使用下划线,因为…

力扣精选100道——外观数列(模拟专题)

外观数列算法题链接 🚩了解题意 该题的下面充分的给你说明了这个题目的意思。 3 3 2 2 2 5 1 我们根据我们正常读的顺序读 俩个3 三个2 一个5 一个1 连起来就是 2 3 3 2 1 5 1 这就是最终输出的字符串。 题目开头说了,我们最初是 1开始读…

c语言经典测试题4

1.题1 #include <stdio.h>//没有break的话&#xff0c;输入什么都会往下一直执行下去&#xff0c;而且default在最后就会全都执行 int main() {char c;int v0 0, v1 0, v2 0;do{switch (c getchar())// 输入ADescriptor{casea:caseA:casee:caseE:casei:caseI:caseo:…

HTTP概要

文章目录 什么是HTTP?URL的结构请求报文结构请求方法GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH解释 请求头字段 响应报文结构响应状态响应头字段 HTTP会话3次握手无状态协议 什么是HTTP? HTTP&#xff0c;即Hypertext Transfer Protocol(超文本传输协议) 它是一个”请…

有没有哪些适合程序员的副业?

夸克网盘这个软件出来好久了&#xff0c;官方前不久才开通了推广渠道&#xff0c;这就给了我们以此赚钱的机会。具体时间应该是在2022年12月份。 所谓夸克网盘拉新&#xff0c;就是夸克网盘为了抢占市场&#xff0c;与其他网盘竞争对手&#xff08;百度网盘、迅雷网盘等&#…

CVE-2023-44313 Apache ServiceComb Service-Center SSRF 漏洞研究

本次项目基于go语言&#xff08;本人不精通&#xff09;&#xff0c;虽不是java web框架了 &#xff0c;但搭建web服务的框架一些思想理念却是通用的&#xff0c;我们由此可以得到一些蛛丝马迹....... 目录 漏洞简介 漏洞分析 漏洞复现 漏洞简介 Apache ServiceComb Servi…

Python环境下一种简单的基于域自适应迁移学习的轴承故障诊断方法

域自适应是指在源域和目标域之间进行相同的迁移学习任务&#xff0c;由于两个领域的数据分布不一致&#xff0c;源域中存在大量的带标签的样本&#xff0c;目标域则没有&#xff08;或极少&#xff09;带标签的样本。通过这种方式可以将在源域样本中学到的知识迁移到目标域上&a…

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed

问题描述 安装nacos2.0以上版本&#xff0c;启动报错:com.alibaba.nacos.api.exception.NacosException: Request nacos server failed com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: at com.alibaba.nacos.client.naming.remote.gprc.Nami…

[C#]winform基于opencvsharp结合CSRNet算法实现低光图像增强黑暗图片变亮变清晰

【算法介绍】 "Conditional Sequential Modulation for Efficient Global Image Retouching" 是一种图像修饰方法&#xff0c;主要用于对图像进行全局的高效调整。该方法基于深度学习技术&#xff0c;通过引入条件向量来实现对图像特征的调制&#xff0c;以达到改善…

Polyspace静态检测步骤

Polyspace 是一个代码静态分析和验证的工具&#xff0c;隶属于MATLAB&#xff0c;用于检测代码中的错误和缺陷&#xff0c;包括内存泄漏、数组越界、空指针引用等。帮助开发团队提高代码质量&#xff0c;减少软件开发过程中的错误和风险。 1、打开MATLAB R2018b 2、找到Polys…

“从根到叶:深入理解排序数据结构“

一.排序的概念及引用 1.1排序的概念 排序是指将一组数据按照一定的规则重新排列的过程。排序的目的是为了使数据具有有序性&#xff0c;便于查找、插入、删除等操作&#xff0c;提高数据的组织和管理效率。 稳定性是指如果序列中存在相等元素&#xff0c;在排序完成后&#…

【简单明了,一文讲解】数据结构与算法基础入门篇--算法之排序篇

图1. 小林Coding整理图 排序算法是计算机科学中常见的一类算法&#xff0c;用于将一组数据按照一定规则进行排序。 常见的排序算法包括以下几种&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;通过相邻元素的比较和交换来实现排序&#xff0c;每一轮将最…

GEE必须会教程—邂逅线代中的矩阵(Array类型)

矩阵&#xff0c;一个令人头疼的名字&#xff0c;学过线性代数的友友们想必对矩阵的运算规则烂熟于心&#xff0c;与它延申出来的向量知识曾经让我们深陷其中。矩阵在高级的数据存储中占据着重要的地位。定义字典类型的过程&#xff0c;其实就是寻找key和value关系的过程&#…

OpenCV 4基础篇| OpenCV图像基本操作

目录 1. 图像读取1.1 cv2.imread() 不能读取中文路径和中文名称1.2 cv2.imdecode() 可以读取中文路径和中文名称 2. 图像的显示2.1 openCV显示图像 cv2.imshow()2.2 matplotlib显示图像 plt.imshow() 3. 图像的保存 cv2.imwrite()4. 图像的复制4.1 img.copy()4.2 np.copy()4.3 …

贪婪算法入门指南

想象一下&#xff0c;你在玩一款捡金币的游戏。在这个游戏里&#xff0c;地图中散布着各种大小不一的金币&#xff0c;而你的目标就是尽可能快地收集到最多的金币。你可能会采取一个直观的策略&#xff1a;每次都去捡最近的、看起来最大的金币。这种在每一步都采取局部最优解的…

ONLYOFFICE 桌面编辑器现已更新至v8.0啦

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

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

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

【LeetCode-337】打家劫舍III(动态规划)

目录 题目描述 解法1&#xff1a;动态规划 代码实现 题目链接 题目描述 在上次打劫完一条街道之后和一圈房屋后&#xff0c;小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为“根”。 除了“根”之外&#xff0c;每栋房子有且只有一个“父“…

华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)---Python3--开源

题目&#xff1a; 考察内容&#xff1a; for if max 代码&#xff1a; """ 题目分析&#xff1a;投资额*回报率投资回报 要在可接受范围内选择最优的投资方式获得最大回报最多投资2个理财产品输入&#xff1a; 产品数int; 总投资额int; 总风险int 产品投资…