java基础-io(字符流)

1. 编码问题

java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)

文本是byte byte byte..的数据序列

文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储

2.字符流 Reader/Writer    --操作的是文本文本文件(gbk编码)

 字符的处理,一个字符一个字符的处理

字符的底层依旧是字节序列

InputStreamReader 完成byte流解析为char流,按照编码解析

OutputStreamWriter 提供char流到byte流,按照编码处理

public static void main(String[] args) {
        InputStreamReader inputStreamReader = null;
        OutputStreamWriter outputStreamWriter = null;
        try {
            inputStreamReader = new InputStreamReader(new FileInputStream("demo/demo.dat"), "utf-8");    //默认项目的编码就是
//            int c;
//            while ((c = inputStreamReader.read()) != -1){
//                System.out.println((char)c);
//            }
            outputStreamWriter = new OutputStreamWriter(new FileOutputStream("demo/dos.dat"), "utf-8");
            char[] buffer = new char[8 * 1024];
            int c;
            while ((c = inputStreamReader.read(buffer, 0, buffer.length)) != -1) {
                String s = new String(buffer, 0, c);
                System.out.println(s);
                outputStreamWriter.write(buffer, 0, c);
            }
            outputStreamWriter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStreamReader != null) {
                    inputStreamReader.close();
                }
                if (outputStreamWriter != null) {
                    outputStreamWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

  

3. FileReader/FileWriter 

public class FileReaderAndWriter {
    public static void main(String[] args) {
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
            fileReader = new FileReader("demo/raf.dat");
            fileWriter = new FileWriter("demo/dos.dat", true);      //true追加
            char[] buffer = new char[8 * 1024];
            int c;
            while ((c = fileReader.read(buffer, 0, buffer.length)) != -1) {
                fileWriter.write(buffer, 0, c);
            }
            fileWriter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  

4. 待续

猜你喜欢

转载自www.cnblogs.com/freeht/p/12748501.html