【Java高级特性】I/O流——使用字符流读写文件

1.使用字符流类BufferedReader读文本文件

BufferedReader和InputStreamReader两个类都是Reader抽象类的子类FileReader类是InputStreamReader类的子类,它们可以通过字符流的方式读取文件,并使用缓冲区,提高了读文本文件的效率。读取文本文件的具体步骤如下:

1)导入相关的类

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

2)构造一个BufferedReader对象

FileReader fr = new FileReader("mytest.txt");

BufferedReader br = new BufferedReader(fr);

或者

FileInputStream fis=new new FileInputStream("mytest.txt");

InputStreamReader isr=new InputStreamReader(fis, "UTF-8");//此构造方法可以设置指定的编码格式读取文件,防止出现乱码情况

BufferedReader br = new BufferedReader(isr);

3)利用BufferedReader类的方法读取文本文件中的数据

br.readLine();//读取一行数据,返回字符串

4)关闭相关的流对象

br.close();//后开的流先关

fr.close();//先开的流后关

代码举例说明:

//Bufferedreader类是Reader类的子类,效率比InputStreamReader类要高
	public static void main(String[] args) {
		InputStream is=null;
		Reader reader=null;
		BufferedReader br=null;
		try {
			//向上转型:InputStream类是抽象类,不能实例化,指向其子类FileInputStream类
			is = new FileInputStream("E:/b.txt");
			//向上转型:Reader类是抽象类,不能实例化,指向其子类InputStreamReader类,
			//创建InputStreamReader类对象,此构造方法传递参数是InputStream类型
			 reader=new InputStreamReader(is, "UTF-8");
			//创建BufferedReader类对象,此构造方法传递参数是Reader类型
			 br=new BufferedReader(reader);
			String str;
			while((str=br.readLine())!=null){//readLine()方法:一行一行的读取文件数据
				System.out.println(str);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(br!=null){
					br.close();
				}
				if(reader!=null){
					reader.close();
				}
				if(is!=null){
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

2.使用字符流类BufferedWriter写文本文件

BufferedWriter和OutputStreamWriter两个类都是Reader抽象类的子类FileWriter类是OutputStreamWriter类的子类,它们可以通过字符流的方式并通过缓冲区把数据写入文本文件,提高了写文本文件的效率。把数据写入文本文件的具体操作步骤如下:

1)导入相关的类

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

2)构造一个BufferedWriter对象

FileWriter fw = new FileWriter("mytest.txt");

BufferedWriter bw = new BufferedWriter(fw);

或者

FileOutputStream fos=new FileOutputStream("mytest.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");//此构造方法可以设置指定的编码格式写入文件,防止出现乱码情况

BufferedWriter bw = new BufferedWriter(osw);

3)利用BufferedWriter类的方法读取文本文件中的数据

bw.write("hello");//写入数据hello

bw.newLine();//换行

4)关闭相关的流对象

bw.flush();//刷新缓冲区

bw.close();//后开的流先关

fw.close();//先开的流后关

代码举例说明:

//BufferedWriter类是Writer类的子类,效率比OutputStreamWriter类高
	public static void main(String[] args) throws IOException {
		OutputStream os=new FileOutputStream("E:/d.txt",true);
		Writer writer=new OutputStreamWriter(os, "UTF-8");
		//FileWriter类是OutputStreamWriter类子类,OutputStreamWriter类是Writer类子类
		//Writer writer=new FileWriter("E:/e.txt", true);
		//创建BufferedWriter类对象
		BufferedWriter bw=new BufferedWriter(writer);
		bw.write("qwertyui");
		bw.write("asdffg");
		bw.newLine();//换行
		bw.write("布欧");
		System.out.println("文件写入完毕");
		bw.close();
	}

3.读写二进制文件

当我们需要对文件的图片、音频、视频等数据进行读写操作时,可以使用DataInputStream和DataOutputStream这两个常用的类。具体步骤如下:

1)导入相关的类

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

2)构造一个数据输入流对象和输出流对象

FileInputStream fis = new FileInputStream("HelloWorld.class");

DataInputStream dis = new DataInputStream(fis);

FileOutputStream fos = new FileOutputStream("AnHelloWorld.class");

DataOutputStream dos = new DataOutputStream(fos);

3)利用数据输入流类和输出流类的方法读写二进制文件中的数据

dis.read();//读取下一个数据

dis.readInt();//读取出来的是整数

dis.readByte();//读取出来的数据是Byte

dos.write(1); //把数据写入二进制文件

4)关闭数据输出流和输入流

//后开的流先关,先开的流后关

dos.close();

fos.close();

dis.close();

fis.close();

代码举例说明:复制一个图片

//DataInputStream类和DataOutputStream类常用于处理图片,音频,视频等二进制文件
	public static void main(String[] args) throws IOException {
		InputStream is=new FileInputStream("E:/java.jpeg");
		DataInputStream dis=new DataInputStream(is);
		OutputStream os=new FileOutputStream("E:/copyjava.jpeg");
		DataOutputStream dos=new DataOutputStream(os);
		int num;
		while((num=dis.read())!=-1){
			dos.write(num);
		}
		System.out.println("图片复制完毕");
		dos.close();
		os.close();
		dis.close();
		is.close();
	}
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值