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

    }

}
 

 

 

 

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