11.0、Java_IO流 - 转换流、PrintWriter字符输出流
InputStreamReader / OutputStreamWriter 用来实现将字节流转换成字符流;
比如,如下场景:
System.in 是字节流对象( 在 System 类中有一个静态的 static in 对象,所以我们用 System.in 获取的其实就是一个 InputStream 输入流的对象; ),代表键盘的输入,如果我们按行接收用户的输入时,就必须用到缓冲字符流 BufferedReader 特有的方法 readLine() ,但是经过观察会发现在创建 BufferedReader 的构造方法的参数必须是一个 Reader 对象,这时候我们的转换流 InputSteamReader 就派上用场了;
而 System.out 也是字节流对象( 在 System 类中有一个静态的 static out 对象,所以我们用 System.out 获取的其实就是一个 OuputStream 输出流的对象; ),代表输出到显示器,按行读取用户的输入后,并且要将读取的一行字符串直接显示到控制台,就需要用到字符流 write ( String str ) 方法,所以我们要使用 OutputStreamWriter 将字节流转化为字符流;
代码示例,如下所示 ->
public class Demo8 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));while(true) {bw.write("请输入");String input = br.readLine();if("exit".equals(input)) {break;}bw.write("您输入的是"+input);bw.newLine();bw.flush();}}
}
PrintWriter:
PrintWriter 是一个字符输出流 ,而且他是一个节点流,可以直接使用;PrintWriter 流中的 println();方法自带 flush();刷新方法以及输出一行后自动换行的功能;
实例代码,如下所示 ->
public class Demo8 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/text1.txt")));PrintWriter pw = new PrintWriter("D:/text2.txt");String tmp = "";int i = 1;while((tmp = br.readLine()) != null) {pw.println(i+","+tmp);i++;}}
}