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();
    }
    
}

 

posted @ 2020-03-30 21:11  苏胖胖  阅读(141)  评论(0编辑  收藏  举报