字符流

字符流与字节流区别

  字符流 处理文本文档中文问题 字节流解决不了中文文档的处理 不可以处理图片 视频等的复制

  字节流 除了文本文档其他都用 

字符编码表

  1.ascii: 一个字节中的7位就可以表示。对应的字节都是正数。0-xxxxxxx

  2.iso-8859-1:拉丁码表 latin,用了一个字节用的8位。1-xxxxxxx  负数  

  3.GBK:目前最常用的中文码表,2万的中文和符号。用两个字节表示,其中的一部分文字,第一个字节开头是1,第二字节开头是0        uft-8 三个字节 基于unicode

  4.unicode:国际标准码表:无论是什么文字,都用两个字节存储

  5.能识别中文的码表:GBK、UTF-8;正因为识别中文码表不唯一,涉及到了编码解码问题。

  对于我们开发而言;常见的编码 GBK  UTF-8  ISO-8859-1

    文字--->(数字) :编码。 “abc”.getBytes()  byte[]

    (数字)--->文字  : 解码。 byte[] b={97,98,99}  new String(b,0,len)

  注意: Java中的char类型用的就是这个码表。char c = 'a';占两个字节。  Java中的字符串是按照系统默认码表来解析的。简体中文版 字符串默认的码表是GBK

字符输入流Reader

   read():读取单个字符并返回

    read(char[]):将数据读取到数组中,并返回读取的个数。

FileReader

  

public class Demo1 {
	public static void main(String[] args) throws IOException {
		//明确数据源
		FileReader fr=new FileReader("D:\\demo1018\\hello.txt");
		//都一个字符
		/*int len=fr.read();
		System.out.println((char)len);*/
		//一个字符一个字符的读
		int len=0;
		while ((len=fr.read())!=-1) {
			System.out.print((char)len);
		}
		//释放资源
		fr.close();
	}
}
package com.oracle.demo02;

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

public class Demo2 {

	public static void main(String[] args) throws IOException {
		//明确数据源
		FileReader fr=new FileReader("D:\\demo1018\\hello.txt");
		//读一个字符
		char ch[]=new char[1024];
		int len=0;
		while ((len=fr.read(ch))!=-1) {
			System.out.print(new String(ch,0,len));
			System.out.println();
			System.out.println(len);
		}
		//释放资源
		fr.close();

	}

}

字符输出流Writer

  FileWriter 写入字符到文件中,先进行流的刷新,再进行流的关闭

  

package com.oracle.demo02;

import java.io.FileWriter;
import java.io.IOException;

public class Demo3 {
	public static void main(String[] args) throws IOException {
		//明确目的地
		//FileWriter fw=new FileWriter("D:\\demo1018\\nihao.txt",true);
		FileWriter fw=new FileWriter("D:\\demo1018\\nihao.txt",true);
		//写入字符
		fw.write(100);
		fw.flush();
		//写一个字符数组
		fw.write("\r\n你好123".toCharArray());
		fw.flush();
		//写入个字符串
		fw.write("新年好,123",1,2);
		fw.flush();
		/*fw.flush();
		//写一个字符数组
		char ch[]={'在','那','林','4','5','7','w'};
		fw.write(ch,0,3);
		fw.flush();
		//写入个字符串
		fw.write("你好Java,1233",0,6);
		fw.flush();*/
		//释放资源
		fw.close();
	}
}

 

flush()和close()的区别

  flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用

  close():关闭资源,关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以再使用。

  如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭

 

复制文本文件

package com.oracle.demo02;

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

public class Copy {

	public static void main(String[] args) throws IOException {
		//明确目的地(复制到那里去)
		FileWriter fw=new FileWriter("D:\\demo1018\\a\\nihao2.txt");
		//明确数据源(从哪赋值)
		FileReader fr=new FileReader("D:\\demo1018\\nihao.txt");
		//一个字符一个字符复制
		/*int len=0;
		while ((len=fr.read())!=-1) {
			fw.write(len);
			fw.flush();
		}*/
		//一个字符数组一个字符数组复制
		char ch[]=new char[1024];
		int len=0;
		while ((len=fr.read(ch))!=-1) {
			fw.write(ch,0,len);
			fw.flush();
		}
		//释放资源
		fw.close();
		fr.close();

	}

}

  

 

你可能感兴趣的:(字符流)