文章目录
1 字符流
字符输入流:Reader
字符输出流:Writer
具体使用方式以文件字符输入流输出流为例
文件字符输入流:FileReader
文件字符输出流:FileWriter
对应字节流学习,使用方法也类似
2文件字符流(继承自转换流,转换流继承自字符流)
字符输入流FileReader
2.1 常用构造方法
1、FileReader(File file) ;指定一个File文件(一般只是用文件路径名)
2、FileReader(String fileName);指定一个文件名
2.1常用方法
1、read();读取一个字符,返回该字符的int值
2、read(char[] cbuf);读取到char数组里,一次最多读取cbuf.length()个字符,数组满了后不会清空数组,下一次读取挨个覆盖。跟inputStream的read一样
举例说明:
1.txt : abcdef
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader(new File("1.txt"));
FileWriter fw = new FileWriter(new File("2.txt"));
char[] chars = new char[5];//这个数组只能存放5个字符
int readNum = 0;
while((readNum = fr.read(chars))!=-1) {
//fw.write(new String(chars,0,readNum));
fw.write(chars);
}
fr.close();
fw.flush();
fw.close();
}
第一个数组放了5个字符:abcde,可是还有一个f没有读到,所以会读第二次,那么现在数组里放的是abcde,这是会从第一位开始覆盖,把f覆盖到a上,所以现在的数组里放的是fbcde。那么这两次一共读到的就是abcdefbcde
运行结果:
3、read(char[] cbuf,int off,int len);把数据读取到数组的指定位置
4、close() 关闭输入流。(注意,字符流没有字节流中的available方法,返回读取的文件的剩余字节数)
字符输出流FileWriter
2.2构造方法
1、FileWriter(File f);/FileWriter(String fileName )指定一个文件
2、FileWriter(File file,boolean append)/FileWriter(String fileName,boolean append); 如果append是true,则将字节写入文件末尾处(插入),false写入文件开始处(覆盖)
2.2常用方法
1、writer(int c);写入一个字符
2、write(char[] cbuf)/writer(char[] cbuf,int off,int len) 写入字符数组
3、write(String str)/writer(String str,int off,int len) 写入字符串
4、flush() 刷新该流的缓冲,将缓冲的数据刷新到文件中
5、close() 关闭流
3带缓冲区的字符流(继承自字符流,比字符流效率高)
3.1缓冲字符输入流BufferedReader
BufferedReader(Reader r)
常用方法(与字符流基本一样)
1、特有的 readLine();读取一个文本行,返回文本的String格式
2、其他跟reader一样
3.2缓冲字符输出流BufferedWriter
BufferedWriter(Writer w)
常用方法(与字符流基本一样)
1、注意 没有write(String str),只有write(String str,int off,int len)
2、特有:newLine();写入一个行分割符
3、flush();刷新缓冲区
4 转换流(继承字符流)
乱码的产生: 编码与解码使用的编码表不一致。
解决乱码:保证编码与解码使用相同的编码表。
①ASCII
:美国信息交换标准码
1)一个字节的,不可以支持中文。
②ISO-8859-1
:
1)一个字节的,不可以支持中文。
③GBK
:
1)目前汉字使用的编码形式,由2个字节组成。
④Unicode
万国码、统一码 全世界计算机统一编码。
1)Utf-8
:汉字由3个字节组成。
2)Utf-16
3)Utf-32
构造方法
InputStreamReader(InputStream in, Charset cs)
将字节流按照指定的编码形式,转换成一个字符输入流。
OutputStreamWriter(OutputStream out, Charset cs)
将字节流按照指定的编码形式,转换成一个字符输出流