字符流
字符流与字节流区别
字符流 处理文本文档中文问题 字节流解决不了中文文档的处理 不可以处理图片 视频等的复制
字节流 除了文本文档其他都用
字符编码表
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();
}
}
浙公网安备 33010602011771号