IO流的字符流

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

 

                                        字符流
 1.字符流是什么


  字符流是可以直接读写字符的IO流
  字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.   

 
 2.FileReader, FileWriter


  FileReader类的read()方法可以按照字符大小读取
  FileWriter类的write()方法可以自动把字符转为字节写出


 3.什么情况下使用字符流


  字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.
  程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流


 4.带缓冲的字符流


  BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
  BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率
  BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
  BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"


 5.LineNumberReader


  LineNumberReader是BufferedReader的子类, 具有相同的功能, 并且可以统计行号
  调用getLineNumber()方法可以获取当前行号
  调用setLineNumber()方法可以设置当前行号


 6.使用指定的码表读取字符


  FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)
  FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)
 
 定义一个字符数组的复制实例:

package cn.itcast.io;

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

public class Demo3_Copy {

	/**
	 * @param args
	 * @throws IOException 
	 * flush和close的区别
	 * flush方法可以将缓冲区的数据刷到文件上,调用之后还以继续调用写的方法
	 * close方法可以关闭流,在关闭流之前会将缓冲区中的有效字符数据刷出,然后再关闭,如果关闭就不能再调用写的方法
	 */
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("day22笔记.txt");
		FileWriter fw = new FileWriter("copy.txt");
		char[] arr = new char[1024];
		int len;
		while((len = fr.read(arr)) != -1) {
			fw.write(arr, 0, len);
		}
		
		fr.close();
		fw.close();
	}
}


自带缓冲区的复制实例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo3_Copy {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("day22笔记.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
		
		int ch;
		while((ch = br.read()) != -1) {
			bw.write(ch);
		}
		bw.close();
		br.close();
	}
}

 

BufferredReadew 的read方可以读取一整行字符串,BufferedWriter的writeLine可以
 写出字符串
 换行 的方法是newLine  在windows系统中可以使用\r\n
 读取一整行的复制的实例:

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

public class Demo3_Copy {
	BufferedReader br = new BufferedReader(new FileReader("day22笔记.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
		
		String line;
		while((line = br.readLine()) != null) {
			bw.write(line);
			//bw.write("\r\n");				//只支持windows系统
			bw.newLine();					//可以跨平台的,支持任意系统
		}
		
		br.close();
		bw.close();
	}
}	



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值