转换流:
字符流 = 字节流 + 编码表
字节流转换为字符流:
OutputStreamWriter(OutputStream out) :使用默认编码写入数据
public OutputStreamWriter(OutputStream out, String charsetName):使用指定编码写入数据
public InputStreamReader(InputStream in):使用默认编码读数据
public InputStreamReader(InputStream in,String charsetName):使用指定编码读数据
package characterStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class InputStreamReaderDemo {
public static void main(String[] args) {
try {
output();
} catch (IOException e) {
e.printStackTrace();
}
try {
input();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void output() throws IOException{
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("osw.txt"));
osw.write("你吃了吗");
osw.close();
}
private static void input() throws IOException{
InputStreamReader isr = new InputStreamReader(
new FileInputStream("osw.txt"));
int c = 0;
while((c = isr.read()) != -1) {
System.out.print((char)c);
}
isr.close();
}
}
1、OutputStreamWriter的方法:
public void write(int c):写一个字符
public void write(char[] cbuf):写一个字符数组
public abstract void write(char[] cbuf, int off,int len):写一个字符数组的一部分
public void write(String str):写一个字符串
public void write(String str,int off,int len):写一个字符串的一部分
2、close() 和 flush() 的区别:
close() 关闭对象,但是先刷新一次缓冲区。关闭之后,流对象不可以再使用了
flush() 仅仅刷新缓冲区,刷新之后,流对象可以继续使用
3、InputStreamReader的方法:
public int read():一次读取一个字符
public int read(char[] cbuf):一次读取一个字符数组
4、为了简化书写,转换流提供了对应的子类:
FileWriter:用来写入字符文件的便捷类
FileReader:用来读取字符文件的便捷类
5、字符缓冲流:
字符流为了高效读写,也提供了对应的字符缓冲流
(1)BufferefWriter:字符缓冲输出流
public void newLine():根据系统来决定换行符
(2)BufferedReader:字符缓冲输入流
public String readLine():一次读取一行数据复制指定文件:
package characterStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedDemo {
public static void main(String[] args) throws IOException {
//封装数据源
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line = null;
while((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
}