雾山的Java学习笔记---I/O(二)(字符流)

一、首先讲一下字节流和字符流的区别:

java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。


在代码层面:

在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)。

在原理层面:

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。


所以如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。


二、核心类

字节流的核心类是FileReader和 FileWriter。


三、注意原则 

1、不管是输入还是输出流,使用完毕后要close(),如果是带有缓冲区的输出流,应在关闭前调用flush()。 

2、应该尽可能使用缓冲区,来减少IO次数,以提高性能。 

3、能用字符流处理的不用字节流。


四、举例

(1):

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class FileReader_03 {
	public static void main(String[] args) {
		FileReader mIn = null;
		FileWriter mOut = null;
		int b = 0;
		
		try {
			mIn = new FileReader("D:\\快盘\\java\\src\\mashibinSE08\\FileReader_03.java");
			mOut = new FileWriter("C:\\Users\\Administrator\\Desktop\\test.txt");
			while((b = mIn.read()) != -1){
				System.out.print((char) b);
				mOut.write(b);
			}
			mIn.close();
			mOut.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("文件未找到");
			System.exit(-1);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件读取错误");
			System.exit(-1);
		}
	}
}


(2):

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

//字符流
public class FileIO {
	public static void main(String[] args){
		//声明输入输出流的引用
		FileReader fr = null;
		FileWriter fw = null;
		try {
			//定义输入输出流的对象
			fr = new FileReader("d:/input.txt");
			fw = new FileWriter("d:/output.txt");
			//定义char类型的缓冲区
			char[] buffer = new char[1024];
			while(true){
				int temp = fr.read(buffer, 0, buffer.length);
				if(temp == -1){
					break;
				}
				fw.write(buffer, 0, buffer.length);
			}
		} catch (FileNotFoundException e) {
			System.out.println("文件没找到");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("文件读取时发生IO异常!");
			e.printStackTrace();
		}finally {
			//释放资源
			try {
				fw.flush();
				fr.close();
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("finish");
			
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值