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

个人主页Dawn黎明开始

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

欢迎大家关注点赞收藏⭐️留言


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

文章目录

一.字节缓冲流

前言

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性能。

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

1.1字节缓冲流

1.1.1构造方法

【Java】I/O流—缓冲流的基础入门和文件拷贝的实战应用_第3张图片【Java】I/O流—缓冲流的基础入门和文件拷贝的实战应用_第4张图片

1.1.2成员方法

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

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字符缓冲流

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

1.2.1构造方法

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

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

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 -- 遍历得到每一个字符串数据

目的地

   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 array = new ArrayList();
		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

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 array = new ArrayList();
		// 读取数据存储到集合中
		String line = null;
		while ((line = br.readLine()) != null) {
			array.add(line);
		}
		// 释放资源
		br.close();
		// 遍历集合
		for (String s : array) {
			System.out.println(s);
		}
	}
}

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

你可能感兴趣的:(Java,java,I/O流,eclipse)