字符流

发表时间:2017-05-09 13:04:27 浏览量( 32 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、字符流

有了上一节学习字节流的经验,那么字符流就比较简单了。文件在计算机中的作用是存储信息,要读写这些信息需要使用流的相关类型。大量的文字信息都是以字符的方式存在的,Java中的字符是Unicode编码,每个字符是双字节的。字符流从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位,处理效率相对字节流Stream极大提高,但局限与只能处理文本类文件。字符流层次结构的顶层是Reader和Writer抽象类,实现类都是以使用Reader或Writer结尾,如FileReader、FileWriter、BufferedReader、BufferedWriter等。

1、FileReader和FileWriter

我们也实现从硬盘读入文件和把内存信息输出到硬盘的文件中。代码如下:

//通过字符流FileReader读取文件
	public  void input(){
		try {
			FileReader reader=new FileReader("e://abc.txt");
			int temp;
			while((temp=reader.read())!=-1){			
				System.out.print((char)temp);
			}
			
			reader.close();//关闭资源
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	//通过字符流FileWriter写入文件
	public void output(){
		try {
			FileWriter writer=new FileWriter("e://abc.txt");
			
			writer.write("我爱中国");
			
			//writer.write('c');
			//writer.write('我');
			
			writer.flush();
			writer.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

二、实例

下面我们也实现一个复制文件的方法,并分别尝试复制普通文本和复制图片,发现文本复制成功,而图片复制失败。原因我们下面介绍。

public class Stuer {
	
	public static void main(String[] args) {
		Stuer stuer=new Stuer();		
		stuer.copy("e://abc.txt", "d://abc.txt");//成功
		stuer.copy("e://P1080092.jpg", "d://aa.jpg");//失败
	}
	
	public void copy(String srcpath,String targetpath){
		FileReader reader=null;
		FileWriter writer=null;
		
		try {
			reader=new FileReader(srcpath);
			writer=new FileWriter(targetpath);
			int temp;
			while((temp=reader.read())!=-1){			
				//System.out.print((char)temp);
				writer.write(temp);
			}

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				reader.close();
				writer.flush();
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
}

三、字符流和字节流的区别

1、存储单元

字符流处理的单元为2个字节的Unicode字符,可以操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的。

字节流处理单元为1个字节, 操作字节和字节数组。

2、作用

字符流只能处理字符或者字符串,所以它对多国语言支持性比较好。如果是关系到中文,用字符流好点。

字节流可用于任何类型的对象,包括二进制对象如果是图片、音频、歌曲就用字节流好点。