爱生活,爱分享


java文件IO-03 字符流

haiten 2019-09-08 556浏览 0条评论
首页/正文
分享到: / / / /

前言

1. 编码问题

2. 认识文本和文本文件

java 的文本 char 是 16 位无符号整数,是字符的 Unicode 编码(utf-16be);

文件是 byte byte byte ... 的数据序列;

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

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

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

字符的底层仍然是基本的字节序列;

4. 字符流的基本实现:

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

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

一、InputStreamReader & OutputStreamWriter 类

字符流的基本实现: ImportStreamReader 完成 byte 流解析为 char 流,按照编码解析; OutputStreamWriter 提供 char 流到 byte 流,按照编码处理;

// 默认项目的编码,要写文件本身的编码格式
InputStreamReader isr = new InputStreamReader(
        new FileInputStream("D:\\Test\\file\\test\\test.txt")
        ,"utf-8"
);
OutputStreamWriter osw = new OutputStreamWriter(
        new FileOutputStream("D:\\Test\\file\\test\\copy.txt")
        ,"utf-8"
);

char[] buf = new char[10 * 1024];
int c;
while((c = isr.read(buf, 0, buf.length)) != -1) {
    for(int i=0; i<c; i++) {
        String s = new String(buf, 0, c);
        System.out.print(s);
        osw.write(s);
        osw.flush();
    }
}

isr.close();
osw.close();

二、FileReader & FileWriter 类

注意:这两个类不能指定文件编码,使用的是项目的编码。

FileReader fr = new FileReader("D:\\Test\\file\\test\\test.txt");
// 往已有文件内追加内容,需要增加第二个参数 true
FileWriter fw = new FileWriter("D:\\Test\\file\\test\\copy.txt");

char[] buf = new char[10 * 1024];
int c;
while ((c = fr.read(buf, 0, buf.length)) != -1) {
    fw.write(buf, 0, c);
    fw.flush();
}

fr.close();
fw.close();

三、BufferedReader & BufferedWriter/PrintWriter 类

// 对文件进行读写操作
BufferedReader br = new BufferedReader(
        new InputStreamReader(
                new FileInputStream("D:\\Test\\file\\test\\test.txt")
                ,"utf-8"
        )
);
BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(
                new FileOutputStream("D:\\Test\\file\\test\\copy1.txt")
                ,"utf-8"
        )
);
PrintWriter pw = new PrintWriter(
        new OutputStreamWriter(
                new FileOutputStream("D:\\Test\\file\\test\\copy2.txt")
                ,"utf-8"
        )
);

String s;
while ((s = br.readLine()) != null) {
    // 一次读一行,并不能识别换行
    System.out.println(s);

    // 单独写出换行
    bw.write(s);
    bw.newLine();
    bw.flush();

    pw.println(s);
    pw.flush();
}

br.close();
bw.close();
pw.close();
最后修改:2019-09-08 01:20:11 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

说点什么吧~

评论列表

还没有人评论哦~赶快抢占沙发吧~