JAVA--IO流

一、IO流什么?

I/O是Input/output的缩写,用于处理设备之间的数据传输。如读/写文件、网络通讯。
java程序中,对于数据的输入、输出是以流(Stream)的方式进行。
Java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
输入Input:读取外部数据(磁盘、光盘等存储设备的数据)到程序内存中。
输出Output:将程序中(内存)数据输出到磁盘、光盘等存储设备中。

二、流的分类

1.按操作的数据单位不同分为:字节流(8bit)图片视频、字符流(16bit)更适合处理文本
2.按数据流的的流向不同分为:输入流、输出流
3.按流的角色的不同分为:节点流、处理流

抽象基类 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
Java的io流涉及40多个类,都是从4个抽象基类派生的。
由这四个类派生出来的子类名称都是以其父类名作为子类后缀。
在这里插入图片描述
抽象基类 节点流(文件流) 缓冲流(处理流的一种)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter

三、节点流(文件流)

1.文件字符输入流FileReader

package com.java01;import java.io.File;
import java.io.FileReader;
import java.io.IOException;public class IoDemo {public static void main(String[] args)  {File file=new File("C:/ZStudy/aa.txt");FileReader fr=null;try {fr= new  FileReader(file);int data;while((data=fr.read())!=-1){System.out.println();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

read方法重载read(cbuf)

package com.java01;import java.io.File;
import java.io.FileReader;
import java.io.IOException;public class IoDemo02 {public static void main(String[] args) {//1.File类的实例化File file =new File("C:/ZStudy/aa.txt");//2.流的实例化FileReader fr=null;try {fr=new FileReader(file);//3.读入的详细操作//返回每次读入cbuf数组中的字符个数,如果达到文件末尾,返回-1char[] cbuf=new char[5];int len;while((len=fr.read(cbuf))!=-1){for(int i=0;i<len;i++){System.out.print(cbuf[i]);}		}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//4.关闭流if(fr!=null){try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

2.文件字符输出流FileWriter

从内存中写出数据到硬盘的文件里。
1.输出操作,对应的File可以不存在,并不会报异常。
2.File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
File对应的硬盘中的文件如果存在,
如果流使用的构造器是FileWriter(file,false),对原有文件覆盖。
如果流使用的构造器是FileWriter(file,true),不会对原有文件覆盖,而是在原有文件基础上追加内容。

package com.java01;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;public class IoFilewriterDemo {public static void main(String[] args) throws IOException {//1.File类的实例化File file=new File("C:/ZStudy/bb.txt");//2.流的实例化FileWriter fw=	new FileWriter(file,false);//3.输出的详细操作fw.write("FileWriter\n");fw.write("FileWriter01");//4.关闭流fw.close();}}

3.使用FileReader、FileWriter对文本实现复制

package com.java01;import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class Copy {public static void main(String[] args) {//1.实例化File类的对象,指明读入和写出的文件File file1=	new File("C:/ZStudy/bb.txt");File file2=	new File("C:/ZStudy/dd.txt");FileReader fr = null;FileWriter fw = null;try {fr = new FileReader(file1);fw = new FileWriter(file2);//2.实例化FileReader、FileWriter类的对象//3.数据读入和写出的操作char[] cbuf = new char[5];int len;while ((len = fr.read(cbuf)) != -1) {fw.write(cbuf, 0, len);}} catch (Exception e) {// TODO: handle exception}finally{try {if(fw!=null)fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {if(fr!=null)fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

4.FileInputStream字节输入流

对于文本文件(.txt、.java、.c、.cpp)用字符流处理
对于非文本(.jpg、MP3、MP4、avi、doc、ppt)用字节流处理
用字节FileInputStream、FileOuputStream输入输出流实现图片复制

package com.java01;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class FileInputOutputStreamDemo {public static void main(String[] args) {File file1=	new File("C:/ZStudy/640.png");File file2=	 new File("C:/ZStudy/641.png");FileInputStream fs=null;FileOutputStream fo=null;try {fs = new FileInputStream(file1);fo = new FileOutputStream(file2);byte[] buff = new byte[5];int len;while ((len = fs.read(buff)) != -1) {fo.write(buff, 0, len);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try {if(fo!=null)fo.close();} catch (IOException e) {// TODO Auto-generated catch block}try {if(fs!=null)fs.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

5.FileOuputStream字节输出流

四、缓冲流(处理流的一种)

作用:提供流的读取、写入的速度

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

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

相关文章

ELfK logstash filter模块常用的插件 和ELFK部署

ELK之filter模块常用插件 logstash filter模块常用的插件&#xff1a; filter&#xff1a;表示数据处理层&#xff0c;包括对数据进行格式化处理、数据类型转换、数据过滤等&#xff0c;支持正则表达式 grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名…

【算法篇】KMP算法,一种高效的字符串匹配算法

我们今天了解一个字符串匹配算法-KMP算法&#xff0c;内容难度相对来说较高&#xff0c;建议先收藏再细品&#xff01;&#xff01;&#xff01; KMP算法的基本概念 KMP算法是一种高效的字符串匹配算法&#xff0c;由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt提出的&#…

LLMs之gptpdf:gptpdf的简介、安装和使用方法、案例应用之详细攻略

LLMs之gptpdf&#xff1a;gptpdf的简介、安装和使用方法、案例应用之详细攻略 目录 gptpdf的简介 1、处理流程 第一步&#xff0c;使用 PyMuPDF 库&#xff0c;对 PDF 进行解析出所有非文本区域&#xff0c;并做好标记&#xff0c;比如: 第二步&#xff0c;使用视觉大模型&…

MySQL安装时initializing database失败

问题页面&#xff1a; 解决方法&#xff1a; 1.勾选红框中的选项&#xff1a; 2.将下图红框中全部改为英文&#xff1a; 然后一路next就可以了。

cs231n作业1——KNN

参考文章&#xff1a;assignment1——KNN KNN 测试时分别计算测试样本和训练集中的每个样本的距离&#xff0c;然后选取距离最近的k个样本的标签信息来进行分类。 方法1&#xff1a;Two Loops for i in range(num_test):for j in range(num_train):dist X[i, :] - self.X…

vue3使用方式汇总

1、引入iconfont阿里图库图标&#xff1a; 1.1 进入阿里图标网站&#xff1a; iconfont阿里&#xff1a;https://www.iconfont.cn/ 1.2 添加图标&#xff1a; 1.3 下载代码&#xff1a; 1.4 在vue3中配置代码&#xff1a; 将其代码复制到src/assets/fonts/目录下&#xff1…

mp4视频太大怎么压缩不影响画质,mp4文件太大怎么变小且清晰度高

在数字化时代&#xff0c;我们常常面临视频文件过大的问题。尤其是mp4格式的视频&#xff0c;文件大小往往令人望而却步。那么&#xff0c;如何在不影响画质的前提下&#xff0c;有效地压缩mp4视频呢&#xff1f;本文将为您揭秘几种简单实用的压缩技巧。 在分享和存储视频时&am…

Open3D 计算点云的欧式距离

目录 一、概述 1.1欧式距离定义 1.2作用和用途 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 一、概述 在Open3D中&#xff0c;compute_point_cloud_distance函数用于计算两个点云之间的距离。具体来说&#xff0c;它计算的是源点云…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验16 路由信息协议RIP

一、实验目的 1.验证RIP协议的作用&#xff1b; 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.验证RIP协议。 四、实验步骤 1.构建网络拓扑 …

【图像处理】Krita 一款开源免费专业图像处理软件分享

软件介绍 Krita 是一款专业级的图像处理软件&#xff0c;适合数字绘画和创作。它不仅支持栅格图像的细致编辑&#xff0c;还提供了强大的矢量图形工具&#xff0c;使得用户可以在同一个平台上完成多种类型的创作工作。同时具备一定的矢量图形编辑功能。Krita 的首要用途是绘画…

黑马点评商户缓存查询作业——Redis中查询商户类型

记录下自己在gpt帮助下完成的第一个需求~~~ 1. ShopTypeController 2. IShopTypeService 3. ShopTypeServiceImpl&#xff08;模仿ShopServiceImpl来写的&#xff09; 一共分为“1.redis中查询缓存”→“2.判断缓存是否存在&#xff0c;存在直接返回”→“3.缓存不存在则去查数…

2-28 基于matlab提取出频域和时域信号的29个特征

基于matlab提取出频域和时域信号的29个特征&#xff0c;主运行文件feature_extraction&#xff0c;fre_statistical_compute和time_statistical_compute分别提取频域和时域的特征&#xff0c;生成的29个特征保存在生成的feature矩阵中。程序已调通&#xff0c;可直接运行。 2-2…

C语言 printf 函数多种输出格式以及占位输出

一、输出格式 在C语言中&#xff0c;printf 函数提供了多种输出格式&#xff0c;用于控制不同类型数据的输出方式。 1.整数输出格式 %d&#xff1a;以十进制形式输出整数。 %o&#xff1a;以八进制形式输出整数&#xff08;无前导0&#xff09;。 %x 或 %X&#xff1a;以十六进…

EAI四个层次服务-系统架构师(二十六)

1、&#xff08;重点&#xff09;系统应用集成提供了4个不同层次服务&#xff0c;最上层服务是&#xff08;&#xff09;服务。 解析: EAI&#xff08;Enterprise Application Integration&#xff09;系统应用集成&#xff0c;相关概念。 实施EAI必须保证&#xff1a;应用程…

星间链路与星地链路

目录 一、星间链路 1.1 层内星间链路&#xff08;Intra-layer ISLs&#xff09; 1.2 层间星间链路&#xff08;Inter-layer ISLs&#xff09; 1.3 实现方式 1.3.1 微波链路 1.3.2 激光链路 二、星地链路 2.1 星地链路的关键特性 2.1.2 Ka信关站 2.1.2 Q/V信关站 2.1…

JavaScript中,正则表达式所涉及的api,解析、实例和总结

JS中正则的api包括以下&#xff1a; String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index&#xff0c;如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…

谷粒商城学习笔记-使用renren-fast-vue框架时安装依赖包遇到的问题及解决策略

文章目录 1&#xff0c;npm error Class extends value undefined is not a constuctor or null2&#xff0c;npm warn cli npm v10.8.1 does not support Node.js v16.20.2.3&#xff0c;npm error code CERT_HAS_EXPIRED学习心得 这篇文章记录下使用renren-fast-vue&#xff…

QT学习(6)——QT中的定时器事件,两种实现方式;事件的分发event,事件过滤器

目录 引出定时器事件QTimerEventQTimer 事件的分发事件过滤器 总结QT中的鼠标事件定义QLable的鼠标进入离开事件提升为myLabel重写QLabel的函数鼠标的事件鼠标的左中右键枚举鼠标多事件获取和鼠标移动鼠标追踪 QT中的信号和槽自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.…

C++ 类和对象 拷贝构造函数

一 拷贝构造函数的概念&#xff1a; 拷贝构造函数是一种特殊的构造函数&#xff0c;用于创建一个对象是另一个对象的副本。当需要用一个已存在的对象来初始化一个新对象时&#xff0c;或者将对象传递给函数或从函数返回对象时&#xff0c;会调用拷贝构造函数。 二 拷贝构造函…

打卡第6天----哈希表

每天进步一点点,滴水石穿,日积月累,不断提升。 数组和链表章节告一段落。开启哈希表相关的。 哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里 一、有效的字母异位词 leetcode题目编号:242 题目描述: 给定两个字符串 s 和 t ,编写一个函数…