Java IO流之字符流

因为一个中文字符算两个字节,如果按照字节流读取的话,可能只读半个中文字节,从而引入字符流,确保读入字符的准确性

 Java IO流之字符流_第1张图片

1.字符输出流Writer

字符输出流Writer,对文件的操作使用子类 FileWriter

2.字符输入流Reader

字符输入流Reader,对文件的操作使用子类FileReader

特点:

 * 每次的操作单位是一个字符
 * 文件字符操作流r.read(ch)会自带缓存,默认大小为1024字节,在缓存满后,或手动刷新缓存,或关闭流时,会把数据写入文件

3.字节流和字符流的区别:

Java IO流之字符流_第2张图片

字符流的内部实现还是字节流 

4.如何选择使用字节流还是字符流:

一般操作非文本文件时,如图片、视频等,使用字节流。操作文本文件时,使用字符流

5字符流代码示例:

package com.lemon;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/**
 *  字符流:
 * 字符输出流Writer,对文件的操作使用子类 FileWriter
 * 字符输入流Reader,对文件的操作使用子类FileReader
 * 每次的操作单位是一个字符
 * 文件字符操作流r.read(ch)会自带缓存,默认大小为1024字节,在缓存满后,或手动刷新缓存,或关闭流时,会把数据写入文件
 * @author lemonSun
 *
 * 2019年5月4日下午1:06:22
 */
public class CharStreamDemo {

	public static void main(String[] args) {
		
		//out(); //输出流 向文件中写
		in();    //输入流 从文件中读
	}
	
	
	private static void in() {
		
		//确认目标文件
		File file = new File("F:\\javatest\\lemon1.txt");
		
		try {
			Reader r = new FileReader(file);
			StringBuilder sb = new StringBuilder();
			char[] ch = new char[1];
			int len = -1; //每次读取的长度
			while((len = r.read(ch))!=-1) {
				sb.append(new String(ch,0,len));
			}	
			//关闭流 
			r.close();
			//打印
			System.out.println(sb);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	
	private static void out() {
		
		//确认目标文件
		File file = new File("F:\\javatest\\lemon1.txt");
		
		try {
			//输出流
			Writer w = new FileWriter(file,true);//追加内容
			//写入
			w.write("大河向东流");
			//关闭流
			w.close();	
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

 

 

 

你可能感兴趣的:(java基础)