IO流 五、字符流

5-1 字節字符轉換流

1)編碼問題

2)認識文本和文本文件

java 的文本(char)是16位無符號整數,是字符的unicode編碼(雙字節編碼)

文件是byte byte byte……的數據序列

文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化爲byte的存儲序列

3)字符流(Reader Writer)--->操作的是文本文件

字符的處理,一次處理一個字符

字符的底層任然是基本的字節序列

字符流的基本實現

  • InputStreamReader 完成byte流解析爲char流,按照編碼處理解析
  • OutputStreamWriter 提供char流到byte流,按照編碼處理

package com.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class IsrAndOswDemo {

    public static void main(String[] args) throws IOException {

        InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\97386\\Desktop\\子查詢.txt"),
                "utf-8");// 默認項目編碼 操作時要改成文件的編碼
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\97386\\Desktop\\子查詢2.txt"),
                "utf-8");
        // int c;
        // while ((c = isr.read()) != -1) {
        // System.out.print((char) c);
        // }
        char[] buffer = new char[8 * 1024];
        int c;
        // 批量讀取,放入buffer這個字符數組,從第0個位置開始放,最多放buffer.length個,返回的是讀到字符的個數
        while ((c = isr.read(buffer, 0, buffer.length)) != -1) {
            String s = new String(buffer, 0, c);
            System.out.print(s);
            osw.write(buffer, 0, c);
            osw.flush();
        }
        isr.close();
        osw.close();
    }

}
 

 

5-2 字符流之文件讀寫流

FileReader/FileWriter

package com.io;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FrAndFwDemo {

    public static void main(String[] args) throws IOException {

        // 默認文件是該java項目編碼
        FileReader fr = new FileReader("C:\\Users\\97386\\Desktop\\子查詢.txt");
        FileWriter fw = new FileWriter("C:\\Users\\97386\\Desktop\\子查詢2.txt"); // 可以添加第二個參數true,在文件後追加內容
        char[] buffer = new char[2056];
        int c;
        while ((c = fr.read(buffer, 0, buffer.length)) != -1) {
            fw.write(buffer, 0, c);
            fw.flush();
        }
        fr.close();
        fw.close();

    }

}
 

 

5-3 字符流的過濾器

BufferedReader --->readLine 一次讀一行

BufferedWriter/PrintWriter --->寫一行

package com.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class BrAndBwOrPwDemo {

    public static void main(String[] args) throws IOException {

        // 對文件進行讀寫操作
        BufferedReader br = new BufferedReader(
                new InputStreamReader(new FileInputStream("C:\\Users\\97386\\Desktop\\子查詢.txt"), "utf-8"));
        /*BufferedWriter bw = new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream("C:\\Users\\97386\\Desktop\\子查詢2.txt")));*/
        PrintWriter pw = new PrintWriter("C:\\Users\\97386\\Desktop\\子查詢3.txt");
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line); // 一次讀一行,並不能識別換行
            /*bw.write(line);
            // 單獨寫出換行操作
            bw.newLine();
            bw.flush();*/
            pw.println(line);
            pw.flush();
        }
        br.close();
//        bw.close();
        pw.close();

    }

}
 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章