一、字符流
字符流概述:
在操作过程中字节流可以操作所有数据,操作的文件中有中文字符,并且需要对
中文字符做出处理
二、字符编码表
文字——>(数字):编码。"abc".getBytes() byte[]
数字——>(文字):解码。byte[] b = {97, 98, 99} new String(b)
三、字符输入流Reader
FileReader类
此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的;用来操作文件的字符输入流(简便的流)
使用字节流读写中文字符
public class CharStreamDemo {
public static void main(String[] args) throws IOException {
// 给文件中写中文
writeCNText();
// 读取文件中的中文,读取的都是数字,跟字符编码表有关
readCNText();
}
public static void readCNText() throws IOException {
InputStream is = new FileInputStream("e:/file.txt");
int ch = 0;
while((ch = is.read()) != -1){
System.out.println(ch);
}
is.close();
}
public static void writeCNText() throws IOException {
OutputStream os = new FileOutputStream("e:/file.txt");
os.write("Java欢迎您~~~".getBytes());
os.close();
}
}
使用字符输出流读取字符
用来操作文件的字符输出流(简便的流)
public class CharStreamDemo {
public static void main(String[] args) throws IOException {
// 给文件中写中文
writeCNText();
// 读取文件中的中文
readCNText();
}
public static void readCNText() throws IOException {
Reader reader = new FileReader("e:/file.txt");
int ch = 0;
while((ch = reader.read()) != -1){
// 输入的字符对应的编码
System.out.print(ch + " = ");
// 输入字符本身
System.out.println((char) ch);
}
reader.close();
}
public static void writeCNText() throws IOException {
OutputStream os = new FileOutputStream("e:/file.txt");
os.write("Java欢迎您~~~".getBytes());
os.close();
}
}
四、字符输入流Writer
FileWriter类
写入字符到文件中,先进行流的刷新,再进行流的关闭
flush() & close() 的区别
flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用
close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后再关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
Writer writer = new FileWriter("e:/text.txt");
writer.write("你好,谢谢,再见");
/*
* flush() & close()
* 区别:
* flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,
* 流还可以继续使用
* close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,
* 否则丢失数据,然后再关闭流。流不可以使用。
* 如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,
* 由close完成刷新并关闭。
*/
writer.flush();
writer.close();
}
}