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

news2024/12/28 2:17:03

🌺个人主页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 stub
		BufferedWriter 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 stub
		BufferedOutputStream 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 stub
		BufferedOutputStream 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 stub
		BufferedWriter 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.coloradmin.cn/o/1191512.html

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

相关文章

01 计算机图形学概述

什么是图形学 合成和操作视觉信息。 图形学的应用 游戏 电影 动画 模拟 设计 可视化 虚拟现实VR&增强现实AR 电子绘画 图形化UI 字体 图形学的挑战 思维上的挑战 创建与虚拟世界互动需要了解物理世界的各个方面新的计算方法&#xff0c;显示&#xff0c;技术 技术上…

MemcachedRedis构建缓存服务器 (主从,持久化,哨兵)

许多Web应用都将数据保存到 RDBMS中&#xff0c;应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中&#xff0c;就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询…

【Python 千题 —— 基础篇】菜品的价格

题目描述 题目描述 食堂今天准备了很多好吃的菜。“beef” 12 元一份&#xff1b;“rice” 1 元一份&#xff1b;“fish” 8 元一份&#xff1b;其它菜品 5 元一份。请你根据输入的字符串&#xff0c;使用 if-elif-else 语句判断该菜品需要花费多少钱。 输入描述 输入一个菜…

在gitlab中指定自定义 CI/CD 配置文件

文章目录 1. 介绍2. 配置操作3. 配置场景3.1 CI/CD 配置文件在当前项目step1&#xff1a;在当前项目中创建目录&#xff0c;编写流水线文件存放在该目录中step2&#xff1a;在当前项目中配置step3&#xff1a;运行流水线测试 3.2 CI/CD 配置文件位于外部站点上step1&#xff1a…

IP-guard WebServer RCE漏洞复现

0x01 产品简介 IP-guard是由溢信科技股份有限公司开发的一款终端安全管理软件&#xff0c;旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。 0x02 漏洞概述 漏洞成因 在Web应用程序的实现中&#xff0c;参数的处理和验证是确保应用安全的关键环节…

OTA设计思路

什么是 Zigbee 协议&#xff1f; Zigbee 技术是一种连接距离短、功耗低、复杂程度低、数据传输量低的无线通信技术&#xff0c;其命名灵感源自于蜜蜂在群体中的信息传输。它主要通过网关与互联网进行通信&#xff0c;并嵌入各种智能设备&#xff0c;最终实现自动控制和远程控制…

【C++】STL容器适配器——queue类的使用指南(含代码使用)(18)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一、queue 类——基本介绍二、queue 类…

绝对力作:解锁string的所有关键接口,万字深度解析!

W...Y的主页 &#x1f60a; &#x1f354;前言&#xff1a; 通过博主的上篇文章&#xff0c;我相信大家已经认识了STL并且已经迫不及待想学习了&#xff0c;现在我们就走近STL的第一种类——string。 目录 为什么学习string类&#xff1f; C语言中的字符串 标准库中的str…

【T3】畅捷通T3采购管理模块反结账,提示:本年数据已经结转,不能取消结账。

【问题描述】 使用畅捷通T3软件过程中&#xff0c; 针对以前年度进行反结账过程中&#xff0c;遇到采购管理模块取消12月份结账&#xff0c; 提示&#xff1a;本年数据已经结转&#xff0c;不能取消结账。 【分析需求】 按正常逻辑&#xff0c;需要清空新年度数据&#xff0c…

向量的范数、矩阵的范数

向量的范数 p-范数 常用的0-范数、1-范数、2-范数、无穷-范数其实都是p-范数的特殊情形。 0-范数 当p0时&#xff0c;表示0-范数。它比较特殊&#xff0c;本质是一种计数&#xff0c;表示向量中非0元素的个数。 1-范数&#xff08;也称L1范数&#xff09; 当p1时&#xff…

多模态并不是智能的核心

多模态指的是通过多种感知方式&#xff08;如视觉、听觉、语音等&#xff09;来处理和理解信息。虽然多模态对于智能系统的发展和提高用户体验非常重要&#xff0c;但它并不是智能的核心。 智能的核心是指系统具备自主学习、推理和决策的能力。智能系统需要能够通过分析和理解大…

【剑指offer|图解|双指针】训练计划 I + 删除有序数组中的重复项

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️训练计划 I二. ⛳️查找总价格为目标值的两个商品三. ⛳️删除有序数组中的…

Anaconda Powershell Prompt和Anaconda Prompt的区别

先说结论&#xff1a;主要功能应该一样。区别在于powershell支持的命令更多。比如查询路径的命令pwd和列表命令ls。 Anaconda PowerShell Prompt和Anaconda Prompt是Anaconda发行版中两个不同的命令提示符工具。 Anaconda Prompt是Anaconda发布的默认命令提示符工具&#xff0…

学c语言,从基础到深入,有相关书籍可以看吗?

学c语言&#xff0c;从基础到深入&#xff0c;有相关书籍可以看吗&#xff1f; 以下建议是结合本人工作20年的经历和感受总结出来的&#xff0c;每个人所处的环境和情况不太一样&#xff0c;仅供参考。 1. 首先建议你在学习C语言前要了解下这个语言的作用&#xff0c;使用场景…

pytorch基础语法问题

这里写目录标题 pytorch基础语法问题shapetorch.ones_like函数和torch.zeros_like函数y.backward(torch.ones_like(x), retain_graphTrue)torch.autograd.backward参数grad_tensors: z.backward(torch.ones_like(x))来个复杂例子z.backward(torch.Tensor([[1., 0]])更复杂例子实…

机器/深度学习模型最优化问题详解及优化算法汇总

前言 其实最优化问题&#xff0c;从小学开始学习数学的时候就可以说已经接触到了&#xff0c;在我印象中有个问题&#xff0c;用一个平底锅煎饼&#xff0c;每次只能放2只饼&#xff0c;煎一只饼要2分钟&#xff08;正反各用1分钟&#xff09;&#xff0c;煎三只饼要几分钟。这…

C语言C位出道心法(四):文件操作

C语言C位出道心法(一):基础语法 C语言C位出道心法(二):结构体|结构体指针|链表 C语言C位出道心法(三):共用体|枚举 C语言C位出道心法(四):文件操作 一:C语言操作文件认知升维: 二:文件打开 三:文件读写操作 忙着去耍帅,后期补充完整.................................

力扣第1035题 不相交的线中等 c++ (最长公共子序列) 动态规划 附Java代码

题目 1035. 不相交的线 中等 相关标签 数组 动态规划 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足满足&#xff1a; nums1[i] nums2[j]…

双编码器构建机器人零力拖动/导纳控制思路

前言 这篇博客主要记录昨日与实验室大佬针对UR5机器人拖动示教功能实现的思路。由于本人并非主攻力控方面。直到昨天在做实验的时候&#xff0c;与力控组的大佬讨论过后才了解UR机器人实现导纳控制的思路。 关于导纳控制/零力拖动 导纳控制与阻抗控制单从字面去理解很容易记…

ROS中的节点与包

ROS中的节点与包 超声波传感器节点创建Package包 创建node节点运行node节点 安装的基本单位是包 一个包就是一组节点 超声波传感器节点 创建Package包 catkin_create_pkg ssr_pkg rospy roscpp std_msgs软件包回访 其实&#xff0c;在/opt/ros/noetic/share 里面都是软件包…