I/O字符流

来源:互联网 发布:js正则表达式可以为空 编辑:程序博客网 时间:2024/05/17 22:33

构造方法:
FileWriter(File file)
FileWriter(String fileName)
FileReader(File file)
FileReader(String fileName)

写数据方法:
一次写一个字符 write(int c)
一次写一个字符数组write(char[] cbuf)
一次写一个字符数组的一部分write(char[] cbuf, int off,int len)
一次写一个字符串write(String str)
一次写一个字符串的一部分write(String str,int off,int len)

字符输入流
字符输入流操作步骤:
A:创建字符输入流对象
FileReader fr = new FileReader(“a.txt”);

B:读取数据并显示在控制台
a:一次读取一个字符
一次读取一个字符
int ch;
while ((ch = fr.read()) != -1) {
System.out.print((char) ch);
}

b:一次读取一个字符数组
char[] chs = new char[1024];
int len;
while ((len = fr.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
}

C:释放资源
fr.close();
代码演示:
使用字符流 复制文件:

package com.thz_04;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyFile {    public static void main(String[] args) throws IOException {        /**         * 1.封装数据源和目的地         * 2.一次读写一个字符或者一次读写一个字符数组         * 3.关流         */        //1.封装数据源和目的地        FileReader fr = new FileReader("InputStreamReaderDemo.java");        FileWriter fw = new FileWriter("d.java");        //2.1一次读写一个字符        /*int ch;        while ((ch=fr.read())!=-1) {            fw.write(ch);//一次写一个字符            fw.flush();//每写一次刷新缓冲区        }*/        //2.2一次读写一个字符数组        char[] chs = new char[1024];        int len;        while ((len=fr.read(chs))!=-1) {            fw.write(chs, 0, len);            fw.flush();        }        //3.关流        fw.close();        fr.close();    }}

注意:
我们使用字符流复制文件的时候,是什么文件都可以复制吗??
答:不是。使用字符流复制文件对文件是有一定的要求的。
什么要求呢?凡是使用记事本打开你肉眼可以看懂的文件
都可以使用字符流进行复制,如果看不懂就不可以使用。

具体原因:像复制MP3或者一些视频文件的时候,如果他的字节个数不是偶数的话,就会造成文件的缺损,
因为一个字符等于两个字节

高效流:

  • BufferedReader:字符缓冲输入流
    构造:BufferedReader(Reader in)
    特殊方法:public String readLine():包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

  • BufferedWriter:字符缓冲输出流
    构造:BufferedWriter(Writer out)
    特殊方法:public void newLine():会根据系统来确定写入不同的换行符
    代码演示:
    复制文本文件:
    基本字符流一次读写一个字符
    基本字符流一次读写一个字符数组
    高效字符流一次读写一个字符
    高效字符流一次读写一个字符数组

package com.thz_07;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test {    public static void main(String[] args) throws IOException {        method();//基本字符流一次读写一个字符        method2();//基本字符流一次读写一个字符数组        method3();//高效字符流一次读写一个字符        method4();//高效字符流一次读写一个字符数组    }    private static void method4() throws IOException {        //高效字符流一次读写一个字符数组        BufferedReader br = new BufferedReader(new FileReader("a.txt"));        BufferedWriter bw = new BufferedWriter(new FileWriter("j.txt"));        //一次读写一个字符数组        char[] chs = new char[1024];        int len;        while ((len = br.read(chs))!=-1) {            bw.write(chs, 0, len);            bw.flush();        }        //释放资源        bw.close();        br.close();    }    private static void method3() throws IOException {        //高效字符流一次读写一个字符        BufferedReader br = new BufferedReader(new FileReader("a.txt"));        BufferedWriter bw = new BufferedWriter(new FileWriter("j.txt"));        //一次读写一个字符        int ch;        while ((ch=br.read())!=-1) {            bw.write(ch);            bw.flush();        }        //关流        bw.close();        br.close();    }    private static void method2() throws IOException {        //基本字符流一次读写一个字符数组        FileReader fr = new FileReader("a.txt");        FileWriter fw = new FileWriter("j.txt");        //一次读写一个字节数组        char[] chs = new char[1024];        int len;        while ((len = fr.read(chs))!=-1) {            fw.write(chs, 0, len);            fw.flush();        }        //关流        fw.close();        fr.close();    }    private static void method() throws IOException {        //基本字符流一次读写一个字符        FileReader fr = new FileReader("a.txt");        FileWriter fw = new FileWriter("j.txt");        //一次读取一个字符,返回的是该字符对应的int值/*      System.out.println((char)fr.read());        System.out.println((char)fr.read());        System.out.println((char)fr.read());        System.out.println((char)fr.read());        System.out.println((char)fr.read());        */        int ch;        while ((ch=fr.read())!=-1) {            //System.out.println((char)ch);            fw.write(ch);            fw.flush();        }        //释放资源        fr.close();        fw.close();    }}
0 0
原创粉丝点击