【Java】I/O流—缓冲流的基础入门和文件拷贝的实战应用

🌺个人主页Dawn黎明开始

🎀系列专栏Java
每日一句你能坚持到什么程度,决定你能达到什么高度

📢欢迎大家关注🔍点赞👍收藏⭐️留言📝


文章目录

一.🔐字节缓冲流

📋前言

1.1🔓字节缓冲流

1.1.1🔑构造方法

1.1.2🔑成员方法

1.1.3🔑实例练习

1.2🔓字符缓冲流

1.2.1🔑构造方法

1.2.2🔑成员方法

1.2.3🔑实例练习

二.🔐文件拷贝

2.1🔓字节流文件拷贝

2.1.1🔑基本字节流拷贝

2.1.2🔑缓冲字节流拷贝

2.2🔓字符流文件拷贝

2.2.1🔑基本字符流拷贝

2.2.2🔑缓冲字符流拷贝

三、🔐I/O流与集合综合实例

3.1🔓把ArrayList集合中的字符串数据存储到文本文件

3.1.1🔑分析

3.1.2🔑代码如下

3.2🔓从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合

3.2.1🔑分析

3.2.2🔑代码如下


一.🔐字节缓冲流

📋前言

在代码中使用缓冲流(Buffered Streams)有许多好处,特别是在处理I/O操作时,它们可以显著提高性能和效率。缓冲流在底层通过缓冲区减少对磁盘或网络的实际读写次数,从而提高了读写性能。相比于直接操作底层输入输出流,缓冲流可以减少频繁的磁盘或网络访问,提升整体的I/O性能。

1.1🔓字节缓冲流

1.1.1🔑构造方法

1.1.2🔑成员方法

1.1.3🔑实例练习

🚩(BufferedOutputStream)实例练习

代码如下👇🏻

package BufferedOutputStreamDemo;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamDemo1 {public static void main(String[] args) throws IOException {
//		FileOutputStream fos=new FileOutputStream("a.txt",true);
//		BufferedOutputStream bos = new BufferedOutputStream(fos);BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("a.txt"));bos.write("java".getBytes());bos.write("\n中国".getBytes());bos.close();}
}

🚩(BufferedInputStream)实例练习

代码如下👇🏻

package BufferedInputStreamDemo;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferedInputStreamDemo1 {public static void main(String[] args) throws IOException {BufferedInputStream bis=new BufferedInputStream(new FileInputStream("a.txt"));byte [] bys=new byte[1024];int len=0;while((len=bis.read(bys))!=-1) {String string=new String(bys,0,len);System.out.print(string+"\t");
//			System.out.print(new String(bys,0,len));}bis.close();}
}

1.2🔓字符缓冲流

1.2.1🔑构造方法

1.2.2🔑成员方法

继承Writer和Reader类的成员方法

 字符缓冲流的特殊方法:

BufferedWriter:

public void newLine():根据系统来决定换行符

BufferedReader:

public String readLine():一次读取一行数据

包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

1.2.3🔑实例练习

代码如下👇🏻

package CopyDemo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyFileDemo5 {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedWriter bw=new BufferedWriter(new FileWriter("a.txt"));BufferedReader br=new BufferedReader(new FileReader("b.txt"));String string=null;while((string=br.readLine())!=null) {bw.write(string);bw.newLine();bw.flush();}bw.close();br.close();}
}

二.🔐文件拷贝

2.1🔓字节流文件拷贝

2.1.1🔑基本字节流拷贝

🚩(一次读写一个字节)

package CopyDemo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFileDemo1 {public static void main(String[] args) throws IOException {// 封装数据源FileInputStream fis = new FileInputStream("a.txt");// 封装目的地FileOutputStream fos = new FileOutputStream("b.txt");//一次读写一个字节int b = 0;while ((b = fis.read()) != -1) {fos.write(b);}// 释放资源(先关谁都行)fos.close();fis.close();}}

代码如下👇🏻

🚩(一次读写一个字节数组)

package CopyDemo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFileDemo1 {public static void main(String[] args) throws IOException {// 封装数据源FileInputStream fis = new FileInputStream("a.txt");// 封装目的地FileOutputStream fos = new FileOutputStream("b.txt");//一次读写一个字节int b = 0;while ((b = fis.read()) != -1) {fos.write(b);}// 释放资源(先关谁都行)fos.close();fis.close();}}

2.1.2🔑缓冲字节流拷贝

🚩(一次读写一个字节)

代码如下👇🏻

​
package CopyDemo;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFileDemo3 {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("a.txt"));BufferedInputStream  bis=new BufferedInputStream(new FileInputStream("b.txt"));int b=0;while((b=bis.read())!=-1) {bos.write(b);}bos.close();bis.close();}}​

🚩(一次读写一个字节数组)

代码如下👇🏻

​
package CopyDemo;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFileDemo4 {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("a.txt"));BufferedInputStream  bis=new BufferedInputStream(new FileInputStream("b.txt"));byte[] bys=new byte[1024];int len=0;while((len=bis.read(bys))!=-1) {bos.write(bys,0,len);}bos.close();bis.close();}
}​

2.2🔓字符流文件拷贝

2.2.1🔑基本字符流拷贝

2.2.2🔑缓冲字符流拷贝

代码如下👇🏻

package CopyDemo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyFileDemo5 {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedWriter bw=new BufferedWriter(new FileWriter("a.txt"));BufferedReader br=new BufferedReader(new FileReader("b.txt"));String string=null;while((string=br.readLine())!=null) {bw.write(string);bw.newLine();bw.flush();}bw.close();br.close();}
}

三、🔐I/O流与集合综合实例

3.1🔓把ArrayList集合中的字符串数据存储到文本文件

3.1.1🔑分析

分析:

    ArrayList集合里存储的是字符串。

   遍历ArrayList集合,把数据获取到。

   然后存储到文本文件中。

   (文本文件说明使用字符流)

数据源

   ArrayList<String> -- 遍历得到每一个字符串数据

目的地

   a.txt -- FileWriter -- BufferedWriter

3.1.2🔑代码如下

package CopyDemo;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;public class ArrayListToFileDemo {public static void main(String[] args) throws IOException {// 封装数据与(创建集合对象)ArrayList<String> array = new ArrayList<String>();array.add("hello");array.add("world");array.add("java");// 封装目的地BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));// 遍历集合for (String s : array) {// 写数据bw.write(s);bw.newLine();bw.flush();}// 释放资源bw.close();}
}

3.2🔓从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合

3.2.1🔑分析

分析

     通过题目的意思我们可以知道如下的一些内容,

     数据源是一个文本文件。

     目的地是一个集合。

     而且元素是字符串。

数据源

 b.txt -- FileReader -- BufferedReader

目的地

 ArrayList<String>

3.2.2🔑代码如下

package CopyDemo;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;public class FileToArrayListDemo {public static void main(String[] args) throws IOException {// 封装数据源BufferedReader br = new BufferedReader(new FileReader("b.txt"));// 封装目的地(创建集合对象)ArrayList<String> array = new ArrayList<String>();// 读取数据存储到集合中String line = null;while ((line = br.readLine()) != null) {array.add(line);}// 释放资源br.close();// 遍历集合for (String s : array) {System.out.println(s);}}
}

🌺建议大家亲自动手操作,学编程,多实践练习是提升编程技能的必经之路。欢迎大家在评论区进行讨论和指正

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

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

相关文章

前端开发学习 (三) 列表功能

一、列表功能 1、列表功能 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compa…

Doris_Doris导入常见问题

Doris数据导入错误 &#xff1a;the length of input is too larger than schema 可能原因&#xff1a;varchar长度设置过短 Doris表字段乱序 导入palo表中的csv本身无schema信息&#xff0c;csv与palo表字段顺序必须一致&#xff0c;否则会错乱 Doris数据文件中字段比表字段…

Python基础语法之学习数据转换

Python基础语法之学习数据转换 一、代码二、效果 一、代码 #数字转换成字符串 num_str str(11) print(type(num_str))#字符串转整数 numint("11") print(type(num),num)#浮点数转整数 float_num int(11.1) print(type(float_num),float_num)#整数转浮点数 num_flo…

微信可以添加多少好友?

不知道有没有小伙伴好奇&#xff0c;微信到底可以添加多少好友&#xff1f;正好这个话题也上热搜了&#xff0c;我们就来了解一下。 有网友表示&#xff0c;自己的微信好友数量有10004个&#xff0c;已经不能再添加新的微信好友了。 一个微信号&#xff0c;可以添加的好友上限…

微信支付和微信红包设计用例

微信支付 功能 扫二维码 1.第一次扫描付钱二维码时可以得到相机权限&#xff0c;进入付钱界面 2.第一次扫描付钱二维码时可以拒绝相机权限&#xff0c;退回聊天界面 3.扫一扫可以扫描收钱的二维码 4.扫描出来的信息与收钱人信息相符 5.输入框只能输入数字 6.一次能支付的…

安全防控 | AIRIOT智能安防管理解决方案

现代社会对安全和便捷性的需求越来越高&#xff0c;特别是在大型商业园区、住宅社区和办公大楼等场所。传统的安防系统往往存在一些痛点: 通行效率问题&#xff1a;传统门禁系统通常导致人员排队等待&#xff0c;降低了通行效率。车辆通行管理不当会导致交通拥堵和停车问题。 …

供配电系统智能化监控

供配电系统智能化监控是指利用先进的监测技术、自动化控制技术、计算机网络技术等&#xff0c;对供配电系统进行实时、全方位的监测和控制&#xff0c;以实现供配电系统的安全、稳定、高效运行。 供配电系统智能化监控的主要功能包括&#xff1a; 实时数据采集&#xff1a;通过…

【索引优化与查询优化】

文章目录 1. 索引失效的案例1.1 最左优先1.2 主键插入顺序1.3 计算、函数、类型转换(自动或手动)导致索引失效1.4 范围条件右边的列索引失效1.5 非 条件索引失效1.6 like以通配符%开头索引失效1.7 OR 前后存在非索引的列&#xff0c;索引失效 2. 关联查询优化3. 子查询优化3.1 …

6.一维数组——用冒泡法,选择法将5个整数由大到小排序

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码&#xff08;冒泡法&#xff09;程序运行代码&#xff08;选择法&#xff09; 前言 本系列为一维数组编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 用冒泡法将5个整数由大到小排序 二、题目…

RK3568 android11 实现双路I2C触摸 --GT9xx

一&#xff0c;GT911 触摸屏简介 它的接口类型为 I2C &#xff0c;供电电压和通讯电压均为 3.3V 。这款电容触摸屏内置了上拉电阻&#xff0c;这意味着我们的开发板上与该触摸屏的接口处不需要设置上拉电阻。关于线序&#xff0c;同样是 GT911 &#xff0c;不同批次的器件都有…

【代码】数据驱动的多离散场景电热综合能源系统分布鲁棒优化算法matlab/yalmip+cplex/gurobi

程序名称&#xff1a;数据驱动的多离散场景电热综合能源系统分布鲁棒优化算法 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 代码简介&#xff1a;数据驱动的分布鲁棒优化算法。考虑四个离散场景&#xff0c;模型采用列与约束生成(CCG)算法进行迭代求解&#xff0c;场景分…

使用docker-compose优雅部署nacos

查看代码中引入nacos版本 在应用的pom.xml中搜索nacos关键字&#xff0c;找到相关的nacos依赖 点击以来左边的图标&#xff0c;找到依赖管理器中的pom.xml&#xff0c;并全局搜索nacos&#xff0c;即可找到对应的nacos客户端版本 使用docker-compose部署nacos version: 3s…