【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://www.mzph.cn/news/700042.shtml

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

相关文章

VR系统的开发流程

虚拟现实(Virtual Reality,VR)系统是一种通过计算机技术模拟出的具有三维视角和交互性的虚拟环境,使用户能够沉浸在其中并与虚拟环境进行交互。这种技术通常利用头戴式显示器和手柄等设备,使用户能够感觉到仿佛身临其境…

【kubernetes】kubeadm部署k8s集群(3主3从+keepalived/nginx负载均衡高可用)

目录 一、完成系统初始化 步骤一:常规环境初始化 步骤二:内核版本升级以及内核限制文件参数修改 步骤三:提前准备好负载均衡器和keepalived(接着之前的二进制部署修改的) 二、所有节点部署docker,以及指定版本的kubeadm 步骤…

Mysql系列之命令行登录、连接工具登录、数据库表常用命令

登录与常用命令 连接工具登录命令行登录数据库1、查看数据库2、指定数据库3、查看当前数据库4、建库语句 数据表1、查看数据表2、查看表结构信息3、查看建表语句4、建表语句 连接工具登录 首先下载mysql连接工具,解压后直接打开软件,按以下步骤操作&…

CSS实现半边边框(只有边框的部分可见)

CSS实现半边边框&#xff08;只有边框的部分可见&#xff09; <div class"part box"><h1>内容</h1><!-- 绘出下面两个对角边框--><div class"part-footer"></div> </div>主要代码 .box {width: 100px;height:…

RabbitMq:什么是RabbitMq? ①

一、RabbitMq定位 RabbitMq是一个基于消息订阅发布的一款消息中间件。 二、技术原理 核心概念 server&#xff1a;又称broker&#xff0c;接受客户端连接&#xff0c;实现AMQP实体服务。缓存代理&#xff0c;Kafka集群中的一台或多台服务器统称broker.connection&#xff1a;…

【Java学习笔记】

API 爬虫 练习 本地爬虫和网络爬虫 (1)本地爬虫 有如下文本&#xff0c;请按照要求爬取数据。 ​ Java自从95年问世以来&#xff0c;经历了很多版本&#xff0c;目前企业中用的最多的是Java8和Java11&#xff0c;因为这两个是长期支持版本&#xff0c;下一个长期支持版本时…

工作中常见问题总结

工作中常见错误清单 1、springboot实现无数据库启动 问题 springboot往往是作为b/s系统的server端的架子来使用&#xff0c;但是有些时候&#xff0c;是作为静默的server&#xff0c;并没有界面和数据库&#xff0c;但是springboot默认是链接数据库的&#xff0c;如何解决这个…

2024年初中生古诗文大会备考:选择题往年真题练习和解析

今天我们继续来做初中古诗文大会的选择题真题&#xff0c;让大家了解初中生古诗文大会的考察内容&#xff0c;并且提供了我独家的题目解析和答案&#xff0c;供孩子们参考。 Tips&#xff1a;通过对古诗文大会题目的解析发现&#xff0c;古诗文大会的许多题目都来自于中考、高…

Druid无法登录监控页面

问题表现&#xff1a;在配置和依赖都正确的情况下&#xff0c;无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的&#x1f914; Debug发现 ResourceServlet 是Druid的登录实现&#xff0c; 且调试发现usernameParam是null&am…

在jar里限制指定的包名才可调用(白名单)。

1. 在jar包中定义一个接口&#xff0c;例如 用于检查传入的hash值是否匹配预设的值。 2. 在调用接口的地方&#xff0c;获取当前应用的hash值。 3. 将当前应用的hash值与预设的值进行比较&#xff0c;如果匹配&#xff0c;则允许调用接口&#xff1b;否则&#xff0c;拒绝调用。…

Apache Maven简介

Maven 简介 Apache Maven 是一个用于项目构建、依赖管理和项目信息管理的强大工具。它基于项目对象模型(Project Object Model,POM)进行构建,通过描述项目的结构和依赖关系来管理项目的构建过程。 以下是 Apache Maven 的一些关键原理和工作流程: 项目对象模型(POM)…

网络 - OkHttp

一、概念 二、基本使用 2.1 get请求 fun getCall() {//创建客户端val client OkHttpClient.Builder().connectTimeout(5000, TimeUnit.MILLISECONDS).build()//创建请求val request Request.Builder().get().url("https://www.baidu.com").build()//创建任务val…

python程序设计基础:字符串与正则表达式

第四章&#xff1a;字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII&#xff0c;仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码&#xff0c;最多只能表示256个符号。 随着信息技…

【数据结构与算法初学者指南】【冲击蓝桥篇】String与StringBuilder的区别和用法

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

docker打包当前dinky项目

以下是我的打包过程&#xff0c;大家可以借鉴。我也是第一次慢慢摸索&#xff0c;打包一个公共项目&#xff0c;自己上传。 如果嫌麻烦&#xff0c;可以直接使用我的镜像&#xff0c;直接跳到拉取镜像&#xff01; <可以在任何地方的服务器进行拉取> docker打包当前din…

LLMs之Gemma:Gemma(Google开发的新一代领先的开源模型)的简介、安装、使用方法之详细攻略

LLMs之Gemma&#xff1a;Gemma(Google开发的新一代领先的开源模型)的简介、安装、使用方法之详细攻略 导读&#xff1a;此文章介绍了Google推出的新一代开源模型Gemma&#xff0c;旨在帮助研发人员负责任地开发AI。 背景&#xff1a; >> Google长期致力于为开发者和研究人…

如何在 非C盘 安装 WSL?

来源&#xff1a;https://superuser.com/questions/1572834/is-there-any-way-to-install-wsl-on-non-c-drive 首先打开 Powershell&#xff0c;输入如下命令 &#xff08;Set-Location 到你想放置 WSL2 的磁盘&#xff09; # Substitute the drive on which you # want WSL …

linux下搭建boost、muduo、mysql、nginx

参考博客&#xff1a; 1.boost&#xff1a;C网络编程 - Boost::asio异步网络编程 - 01- boost库源码编译安装 2.muduo&#xff1a;C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装 3.mysql&#xff1a; sudo apt-get install mysql-server sudo apt-get inst…

Vue(学习笔记)

什么是Vue Vue是一套构建用户界面的渐进式框架 构建用户界面&#xff1a; 基于数据渲染出用户可以看到的界面 渐进式&#xff1a; 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vue中的所有API都学完才能开发Vue&#xff0c;可以学一点开发一点 创建Vue实例 比如就上面…

猫头虎分享已解决Bug || ImportError: Keras requires TensorFlow 2.2 or higher

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …