字符编码
- ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
- UTF-8 针对Unicode码表的可变长度字符编码
- GB2312 简体中文
- GBK 简体中文、扩充
- BIG5 台湾、繁体中文
字符流
- 字符流的父类(抽象类):
- Reader:字符输入流
- public int read(){}
- public int read(char[] c){}
- public int read(char[] b,int off,int len){}
- Writer:字符输出流
- public void write(int n){}
- public void write(String str){}
- public void write(char[] c){}
- Reader:字符输入流
文件字符流
- FileReader:
- public int read(char[] c)//从流中读取多个字符,将读到的内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
- FileWriter:
- public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流。
FileReader
import java.io.FileReader;
/**
*FileReader读取文件
*/
public class Demo09 {
public static void main(String[] args) throws Exception {
//1.创建FileReader 文件字符输入流
FileReader fr = new FileReader("d:\\hello.txt");
//2.读取
//2.1单个字符读取
/* int data =0;
while((data=fr.read())!=-1){
System.out.print((char)data);
}*/
//2.2多个字符的读取
char[] buf = new char[2];
int count =0;
while((count=fr.read(buf))!=-1){
System.out.println(new String(buf,0,count));
}
//3.关闭
fr.close();
}
}
FileWriter
import java.io.FileWriter;
/**
* 使用FileWriter写入文件
*/
public class Demo10 {
public static void main(String[] args) throws Exception{
//1.创建FileWriter对象
FileWriter fw = new FileWriter("d:\\write.txt");
//2.写入
for (int i = 0; i <10 ; i++) {
fw.write("java是世界上最好的语言\r\n");
fw.flush();
}
//3.关闭
fw.close();
System.out.println("执行完毕");
}
}
使用FileReader和FileWriter复制文本文件
import java.io.FileReader;
import java.io.FileWriter;
/**
* 使用FileReader和FileWriter复制文本文件,不能复制图片和二进制文件
* 使用字节流复制任意文件
*/
public class Demo11 {
public static void main(String[] args) throws Exception{
//1.创建FileReader FileWriter
FileReader fr = new FileReader("d:\\write.txt");
FileWriter fw = new FileWriter("d:\\write2.txt");
//2.读写
int data = 0;
while((data=fr.read())!=-1){
fw.write(data);
fw.flush();
}
//3.关闭
fr.close();
fw.close();
System.out.println("执行完毕");
}
}
字符缓冲流
- 缓冲流:BufferedReader/BufferedWriter
- 高效读写
- 支持输入换行符
- 可一次写一行、读一行
BufferedReader
import java.io.BufferedReader;
import java.io.FileReader;
/**
* 使用字符缓冲流读取文件
*/
public class Demo12 {
public static void main(String[] args) throws Exception{
//1.创建缓冲流
FileReader fr = new FileReader("d:\\write.txt");
BufferedReader br = new BufferedReader(fr);
//2.读取
//2.1第一种方式
/* char[] buf = new char[1024];
int count = 0;
while((count=br.read(buf))!=-1){
System.out.println(new String(buf,0,count));
}*/
//2.2第二种方式,一行一行的读取
System.out.println("=========================");
String line = null;
while((line=br.readLine())!=null) {
System.out.println(line);
}
//3.关闭
br.close();
}
}
BufferedWriter
import java.io.BufferedWriter;
import java.io.FileWriter;
/**
* 演示BufferedWriter的使用
*/
public class Demo13 {
public static void main(String[] args) throws Exception{
//1.创建BufferedWriter对象
FileWriter fw = new FileWriter("d:\\buffer.txt");
BufferedWriter bw = new BufferedWriter(fw);
//2.写入
for (int i = 0; i <10 ; i++) {
bw.write("好好学习,天天向上");
bw.newLine();//写入换行符
bw.flush();
}
//3.关闭
bw.close();
System.out.println("执行完毕");
}
}
打印流
- PrintWriter
- 封装了print()/println()方法,支持写入后换行
- 支持数据原样打印
import java.io.PrintWriter;
/**
* 演示PrintWriter的使用
*/
public class Demo14 {
public static void main(String[] args) throws Exception{
//1.创建打印流
PrintWriter pw = new PrintWriter("d:\\print.txt");
//2.打印
pw.println(97);
pw.println(true);
pw.println(3.14);
pw.println('a');
//3.关闭
pw.close();
System.out.println("执行完毕");
}
}
桥转换流
- 桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节流转换为字符流
- 可设置字符的编码格式
InputStreamReader
import java.io.FileInputStream;
import java.io.InputStreamReader;
/**
* 使用InputStreamReader读取文件,指定使用的编码
*/
public class Demo15 {
public static void main(String[] args) throws Exception{
//1.创建InputStreamReader对象
FileInputStream fis = new FileInputStream("d:\\write.txt");
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
//2.读取文件
int data =0;
while((data=isr.read())!=-1){
System.out.print((char)data);
}
//3.关闭
isr.close();
}
}
OutputStreamWriter
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
/**
* 使用OutputStreamWriter写入文件,使用指定的编码
*/
public class Demo16 {
public static void main(String[] args) throws Exception{
//1.创建OutputStreamWriter
FileOutputStream fos = new FileOutputStream("d:\\info.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
//2.写入
for (int i = 0; i <10 ; i++) {
osw.write("我爱西安");
osw.flush();
}
//3.关闭
osw.close();
System.out.println("执行完毕");
}
}