【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.mzph.cn/news/136739.shtml

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

相关文章

聊聊logback的TimeBasedRollingPolicy

序 本文主要研究一下logback的TimeBasedRollingPolicy TimeBasedRollingPolicy public class TimeBasedRollingPolicy<E> extends RollingPolicyBase implements TriggeringPolicy<E> {static final String FNP_NOT_SET "The FileNamePattern option must…

EMQX ECP 2.0 工业互联数据平台产品发布会

在工业企业数字化、智能化转型的过程中&#xff0c;上层创新应用需要高质量数据来驱动。然而&#xff0c;许多工业企业都面临一系列数据层面的挑战&#xff0c;如数据碎片化、数据处理延迟、以及数据质量不一等等。 当下&#xff0c;依托软件定义制造、数据互通、人工智能驱动…

基于springboot实现福聚苑社区团购平台系统项目【项目源码】

基于springboot实现福聚苑社区团购平台系统演示 Javar技术 Java是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&…

git增加右键菜单

有次不小心清理系统垃圾&#xff0c;把git右击菜单搞没了&#xff0c;下面是恢复方法 将下面代码存为.reg文件&#xff0c;双击后导出生效&#xff0c;注意&#xff0c;你安装的git必须是默认C盘的&#xff0c;如果换了地方要改下面注册表文件中相关的位置 Windows Registry …

Windows搭建minio存储

minio功能类似以ftp 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.下载软件 https://dl.min.io/server/minio/release/windows-amd64/minio.exe 2.部署配置 我是在D盘下创建了minio目录 minio.exe是软件minio.log是日志&#xff08;不用创建&#xff09;minio900…

骑士巡游问题

一、骑士巡游问题 题目描述&#xff1a;骑士在8*8的国际象棋棋盘上进行巡游&#xff0c;当指定骑士出发的位置后&#xff08;x,y&#xff09;&#xff0c;能输出骑士遍历棋盘的所有路径坐标。 输出效果&#xff1a; 代码&#xff08;请在visual stdio下运行&#xff0c;Dev-C…

虚幻引擎:如何进行关卡切换?

一丶非无缝切换 在切换的时候会先断开连接,等创建好后才会链接,造成体验差 蓝图中用到的节点是 Execute Console Command 二丶无缝切换 链接的时候不会断开连接,中间不会出现卡顿,携带数据转换地图 1.需要在gamemode里面开启无缝漫游,开启之后使用上面的切换方式就可以做到无缝…

Scala中编写多线程爬虫程序并做可视化处理

在Scala中编写一个爬虫程序来爬取店铺商品并进行可视化处理&#xff0c;需要使用Selenium和Jsoup库来操作网页。在这个例子中&#xff0c;我们将使用多线程来提高爬取速度。 1、首先&#xff0c;我们需要引入所需的库&#xff1a; import org.openqa.selenium.By import org.o…

Milvus Cloud——Agent 框架工作方式

Agent 框架工作方式 我们以 AutoGPT 为例&#xff0c;看看一个 Agent 框架具体是如何工作的&#xff1a; AutoGPT[2] 使用 GPT-4 来生成任务、确定优先级并执行任务&#xff0c;同时使用插件进行互联网浏览和其他访问。AutoGPT 使用外部记忆来跟踪它正在做什么并提供上下文&am…

软文推广中如何搭建媒体矩阵

媒体矩阵简单理解就是在不同的媒体平台上&#xff0c;根据运营目标和需求&#xff0c;建立起全面系统的媒体布局&#xff0c;进行多平台同步运营。接下来媒介盒子就来和大家聊聊&#xff0c;企业在软文推广过程中为什么需要搭建媒体矩阵&#xff0c;又该如何搭建媒体矩阵。 一、…

Python基础教程之十九:Python优先级队列示例

1.什么是优先队列 优先级队列是一种抽象数据类型&#xff0c;类似于常规队列或堆栈数据结构&#xff0c;但每个元素还具有与之关联的“优先级”。在优先级队列中&#xff0c;优先级高的元素先于优先级低的元素提供。如果两个元素具有相同的优先级&#xff0c;则将根据其在队列…

安防监控EasyCVR视频汇聚平台无法接入Ehome5.0是什么原因?该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放…

Python机器学习算法入门教程(第四部分)

接着Python机器学习算法入门教程&#xff08;第三部分&#xff09;&#xff0c;继续展开描述。 十九、信息熵是什么 通过前两节的学习&#xff0c;我们对于决策树算法有了大体的认识&#xff0c;本节我们将从数学角度解析如何选择合适的“特征做为判别条件”&#xff0c;这里…

设计模式——享元模式(Flyweight Pattern)+ Spring相关源码

文章目录 一、享元模式定义二、例子2.1 菜鸟教程例子2.1.1 定义被缓存对象2.1.2 定义ShapeFactory 2.2 JDK源码——Integer2.3 JDK源码——DriverManager2.4 Spring源码——HandlerMethodArgumentResolverComposite除此之外BeanFactory获取bean其实也是一种享元模式的应用。 三…

内存条选购注意事项(电脑,笔记本)

电脑内存条的作用、选购技巧以及注意事项详解 - 郝光明的个人空间 - OSCHINA - 中文开源技术交流社区 现在的电脑直接和内存条联系 电脑上的所有输入和输出都只能依靠内存条 现在买双条而不是单条 买两个相同的内存条最好 笔记本先分清是低电压还是标准电压&#xff0c;DD…

excel如何加密(excel加密的三种方法)

Excel是一款广泛使用的办公软件&#xff0c;有时候我们需要对一些重要的Excel文件进行加密&#xff0c;以保证文件的安全性。下面将介绍3种常用的Excel加密方法。 方法一&#xff1a;通过路径文件-另存为-工具-常规选项-设置打开或修改权限密码&#xff08;密码只可以使数字、字…

〔001〕Java 基础之环境安装和编写首个程序

✨ 目录 ▷ 下载JDK▷ 安装JDK▷ 验证是否安装成功▷ 黑窗口常用命令▷ 设置环境变量▷ 设置 JAVA_HOME 变量▷ 第一个程序▷ 常见错误▷ 使用 IntelliJ IDEA▷ 自定义主题▷ 修改字体▷ IDEA 快捷键▷ 下载JDK JDK(Java Development Kit):是 java 的开发者工具包,必须安装 J…

精通Nginx(10)-负载均衡

负载均衡就是将前端过来的负载分发到两台或多台应用服务器。Nginx支持多种协议的负载均衡,包括http(s)、TCP、UDP(关于TCP、UDP负载均衡另文讲述)等。 目录 HTTP负载均衡 负载均衡策略 轮询 least_conn(最少连接) hash(通用哈希) ip_hash(IP 哈希) random(随…

【Vue】组件封装小技巧 — 利用$attrs和v-bind接收传递未定义的属性

使用介绍 在Vue.js中&#xff0c;$attrs 和v-bind可以用于组件的二次封装&#xff0c;以在封装的组件中传递父组件的属性和事件。这对于创建高度可定制的通用组件非常有用。 下面是一些示例代码&#xff1a; 假设你有一个名为MyButton的自定义按钮组件&#xff0c;它接受一些…

pdf.js不分页渲染(渲染完整内容)

直接上代码 首先引入pdf.js 和 pdf.worker.js // 渲染pdf const pdfUrl test1.pdf, _targetDom pdf-container;pdfjsLib.getDocument(pdfUrl).promise.then(async doc > {let _i 0;for (let item of new Array(doc.numPages).fill()) {await renderOtherPage(doc, _i, _t…