【java】IO流实例 复制文本

这篇博客详细介绍了Java中IO流的使用,包括字节流、字节缓冲流和字符流。通过实例展示了如何利用文件输入流与输出流进行字节数据的复制,详细阐述了不同write和read方法的用法。同时,对比了字节流和字符流在处理数据时的差异,特别是字符流使用缓冲区的特点。最后强调了理解和掌握IO流体系的关键在于了解类之间的继承关系,熟悉不同流的构造方法和特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用 【字节流】文件输入流与文件输出流

字节流主要处理字节和字节数组或二进制对象

写入字节数据的三种方式
       *void write(int b) 将指定字节写入此文件输出流,一次只能写入一个字节数据
        *void write(byte[] b) 将b.length字节从指定字节数组写入此文件输出流(一次写一个字节数组)
        *void write(byte[] b,int off ,int len); 将len字节从指定的字节数组开始,从偏移量off开始写入到此文件输出流(一次写一个字节数组的部分数据)
 

读取字节数据的三种方式
        *int read(byte[] b) 从该输出流读取最多b.length个字节的数据到一个字节数组
        *int read(byte[] b, int off, int len) 从偏移量off开始将最多len字节的数据读入到一个字节数组。
        *int read() 从该输出流获取一个字节的数据,如果达到文件末尾则返回-1

1.一次读写一个字节 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Copytxt {

	public static void main(String[] args) throws IOException {
		
		//复制文件,其实就是把文本文件的内容从一个文件中读取出来(InputStream),然后写入到另一个文件中(OutputStream)
		
		FileInputStream f1=new FileInputStream("D:\\FILE\\java.txt");//创建文件输入流读取文件,即被复制的文件
		FileOutputStream f2=new FileOutputStream("D:\\FILE\\复制\\javaa.txt");//创建文件输出流写入新文件
		
		int i;
		if(f1!=null) {
			
		 while((i=f1.read(b))!=-1) {
			
		//while((int i=f1.read())!=-1){//标记“int”上有语法错误,删除此标记
			//不能直接在while的条件模块中创建变量
			
			f2.write(i);	
		 }
		 
		}
		
		f1.close();
		f2.close();

	}

}

2.一次读写一个字节数组

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Copytxt {

	public static void main(String[] args) throws IOException {
		
		//复制文件,其实就是把文本文件的内容从一个文件中读取出来(InputStream),然后写入到另一个文件中(OutputStream)
		
		FileInputStream f1=new FileInputStream("D:\\FILE\\java.txt");//创建文件输入流读取文件,即被复制的文件
		FileOutputStream f2=new FileOutputStream("D:\\FILE\\复制\\javaa.txt");//创建文件输出流写入新文件
		
		byte[] b=new byte[1000];//相当于一个指定大小的缓冲区
		
		if(f1!=null) {
			
		 while(f1.read(b)!=-1) {
			f2.write(b);
		 }
		 
		}
		
		//释放资源
		f1.close();
		f2.close();

	}

}

利用【字节缓冲流】

1. 一次读写一个字节 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Copytxt {
 
	public static void main(String[] args) throws IOException {
		
		BufferedInputStream b1=new BufferedInputStream(new FileInputStream("D:\\FILE\\java.txt"));//创建文件输入流读取文件,即被复制的文件
		BufferedOutputStream b2=new BufferedOutputStream(new FileOutputStream("D:\\FILE\\复制\\javaa.txt"));//创建文件输出流写入新文件
		
		int i;
		if(b1!=null) {
			
		 while((i=b1.read())!=-1) {		
			b2.write(i);	
		 }
		 
		}
		
		b1.close();
		b2.close();
 
	}
 
}

2. 一次读写一个字节数组

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Copytxt {
 
	public static void main(String[] args) throws IOException {
		
		BufferedInputStream b1=new BufferedInputStream(new FileInputStream("D:\\FILE\\java.txt"));//创建文件输入流读取文件,即被复制的文件
		BufferedOutputStream b2=new BufferedOutputStream(new FileOutputStream("D:\\FILE\\复制\\javaa.txt"));//创建文件输出流写入新文件
		
		byte[] b=new byte[1000];
		if(b1!=null) {
			
		 while(b1.read(b)!=-1) {		
			b2.write(b);	
		 }
		 
		}
		
		b1.close();
		b2.close();
 
	}
 
}

利用【字符流】

字符流主要用于处理字符、字符数组或字符串。 

与字节流的差别在于字符流操作时使用了缓冲区,而字符流是直接对文件进行操作

字节流在操作文件时,即使不关闭资源,文件也能输出,但是字符流不关闭资源则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush()方法刷新缓冲区,这时可以在不close()的情况下输出内容

字符流写数据的五种方式
 * void write(int c) 写一个字符
 * void write(char[] cbuf) 写入一个字符数组
 * void write(char[]cbuf,int off,int len) 写入字符数组的一部分
 * void write(String str) 写入一个字符串
 * void write(String str,int off,int len) 写入一个字符串的一部分


 字符流读数据的两种方式
 * int read() 一次读一个字符数据
 * int read(char[] cbuf) 一次读一个字符数组数据

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Ooutputstreamwrite {

	public static void main(String[] args) throws IOException {

		OutputStreamWriter o= new OutputStreamWriter(new FileOutputStream("D:\\FILE\\a.txt"),"UTF-8");
		/* 构造方法
		 * OutputStreamWriter(OutputStream out)
		 * OutputStreamWriter(OutputStream out,String charsetName) */
		InputStreamReader i= new InputStreamReader(new FileInputStream("D:\\FILE\\java.txt"),"UTF-8");

		char[]  b=new char[100];
		while(i.read(b)!=-1) {
			o.write(b);
		}
		o.close();
		i.close();

	}

}

也可以使用一次读写一个字符数组或一次读写一个字符的方法,这里不再另外举例,参考字节流 

利用【字符缓冲流】

使用其特有方法readLine()不能读取换行符,所以用write()写数据时,写完要加换行符,使用特有方法newLine()

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Bbufferread {

	public static void main(String[] args) throws IOException {
		
		BufferedReader r=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\FILE\\java.txt"),"UTF-8"));
		BufferedWriter w=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\FILE\\a.txt"),"UTF-8"));

		String i="";
		while((i=r.readLine())!=null) {
			w.write(i);
		}
		
		r.close();
        w.close();

	}

}

 掌握这些基本上就掌握了io流的文件读写操作,要构建一个io流体系,在read()和write()方法上大致没有多大区别,还有字符缓冲流的特有方法,主要注意括号内的变量类型要求或括号内不需要添加变量,以及new一个对象时要求括号内的流类型,很容易搞混,要搞清楚字节流与字符流,缓冲流的使用环境

io流主要是里面的类比较多,但是一一学下来其实有很多共同点,因为大部分是继承关系,从字节缓冲流我们可以学到字节流与缓冲流的特点,其实就是二者的结合,类似的我们也可以想象一下字符缓冲流会怎么样,而且字符缓冲流还具有其特有方法。多思考多总结,动手写代码中才能真正理解io流,我们需要考虑类型的不同,以及不同构造方法,特有的方法,每个类有区别却又相似

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老坛酸菜吃鸭子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值