Java学习day38-处理流之二:转换流,处理流之三:标准输入输出流
一、转换流
1.转换流提供了在字节流和字符流之间的转换。
2.Java API提供了两个转换流:
InputStreamReader和OutputStreamWriter
3.字节流中的数据都是字符时,转成字符流操作更高效。
InputStreamReader
4.用于将字节流中读取到的字节按指定字符集解码成字符。需要和InputStream“套接”。
package day18; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; /** * 转换流可以把字节流转化为字符流 * 当字节流中的数据都是字符的时候,使用转换流转换为字符流处理效率更高 * */ public class Test2 { public static void main(String[] args){ //所有的文件都有编码格式,对于我们来说,TXT和java文件一般有三种编码 //ISO8859-1,西欧编码,是纯英文编码,不适应汉字 //GBK和UTF-8,这两种编码同时适用于中文和英文,我们一般使用UTF-8编码 try { // Test2.testInputStreamReader(); Test2.testOutputStreamWriter(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 转换输入流 * 注意,在转换字符流的时候,设置的字符与编码要与读取文件的数据的编码一致,否则会出现乱码 * @throws Exception * */ public static void testInputStreamReader() throws Exception{ FileInputStream fs = new FileInputStream("F:\\testdemo\\demo\\src\\day18\\tt5.txt"); //把字节流转换为字符流 InputStreamReader in = new InputStreamReader(fs, "GBK");//参数1是字节流,参数2是字节编码 char[] c = new char[100]; int len = 0; while((len = in.read(c)) !=-1){ System.out.println(new String(c,0,len)); } in.close(); fs.close(); } /** * 转换字节输出流为字符输出流 * 注意,在转换字符流的时候,设置的字符与编码要与读取文件的数据的编码一致,否则会出现乱码 * OutputStreamWriter * @throws Exception * */ public static void testOutputStreamWriter() throws Exception{ FileOutputStream out = new FileOutputStream("F:\\testdemo\\demo\\src\\day18\\tt6.txt"); OutputStreamWriter os = new OutputStreamWriter(out,"GBK"); os.write("加油中国"); os.flush(); os.close(); out.close(); } }
二、标准输入输出流
1.System.in 和 System.out分别代表了系统标准的输入和输出设备。
2.默认输入设备是键盘,默认输出设备是显示器。
3.System.in的类型是InputStream。
4.System.out的类型是PrintStream,它是OutputStream的子类FileOutputStream的子类。
package day18; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStreamReader; /** * 标准输入和输出流 * */ public class Test3 { public static void main(String[] args){ try { Test3.testSystemIn(); Test3.write2TXT(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 标准的输入流 * */ public static void testSystemIn() throws Exception{ //创建一个接收键盘输入数据的输入流 InputStreamReader is = new InputStreamReader(System.in); //把输入流放到缓冲流里 BufferedReader br = new BufferedReader(is); String str = "";//定义一个临时接收数据的字符串 while((str = br.readLine()) != null){ System.out.println(str); } br.close(); is.close(); } /** * 练习:把控制台输入的内容写到指定的TXT文件中,当接收到字符串over,就结束程序的运行 */ public static void write2TXT() throws Exception{ //创建一个接收键盘输入数据的输入流 InputStreamReader is = new InputStreamReader(System.in); //把输入流放到缓冲流里 BufferedReader br = new BufferedReader(is); BufferedWriter out = new BufferedWriter(new FileWriter("F:\\testdemo\\demo\\src\\day18\\tt7.txt")); String line = ""; while((line = br.readLine()) != null){ if(line.equals("over")){ break; } //读取的每一行都写入到指定的TXT文件中 out.write(line); } out.flush(); out.close(); br.close(); is.close(); } }