InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。比如,如下场景
System.in是字节流对象,代表键盘的输入,如果想按行接受用户的输入时,就必须用到缓冲字符流BufferedReader特有的方法readLine(),但是发现在创建BufferedReader的构造方法的参数必须是一个Reader对象,这时候转换流InputStreamReader就用上了。
System.out也是字节流对象,代表输出到显示器,按行读取用户的输入后,并且要将读取的一行字符串直接显示到控制条,就需要用到字符流的writer(String str)方法,所以我们使用OutputStreamWriter将字节流转换为字符流。
1.通过转换流实现键盘输入屏幕输出
import java.io.*;
public class ConvertStream {
public static void main(String[] args) {
BufferedReader br = null; //字节输入缓冲流
BufferedWriter bw = null; //字节输出缓冲流
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
while(true) {
bw.write("please input");
bw.flush(); //这里不要忘记
String input = br.readLine();
bw.flush(); //这里不要忘记
if("exit".equals(input)) {
break;
}
bw.write(input);
bw.newLine(); //另起一行输入
bw.flush(); //这里不要忘记
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(br!=null) {
br.close();
}
if(bw!=null) {
bw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
2.通过字节流读取文本文件并添加行号
import java.io.*;
public class LineNumberDemo2 {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream("d:/ee.txt")));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/eeee.txt")));
String temp ="";
int i = 1;
while((temp = br.readLine())!=null) {
bw.write(i+", "+temp);
bw.newLine();
i++;
}
bw.flush();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(br!=null) {
br.close();
}
if(bw!=null) {
bw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}