Java—IO流 字符流

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

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

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

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

  1.字符的处理,一次处理一个字符

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

  3.字符流的基本实现:

  InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。

  OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。

public class ISReaderAndOSWriter {

    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("F:\\javaio\\java.txt");
        FileOutputStream out = new FileOutputStream("F:\\javaio\\java1.txt");
        
        InputStreamReader isr = new InputStreamReader(in, "gbk");
        OutputStreamWriter osw = new OutputStreamWriter(out, "gbk");
        
        int c;
//        while ((c = isr.read()) != -1) {
//            System.out.print((char)c);
//        }
        
        char[] buf = new char[8 * 1024];
        while ((c = isr.read(buf, 0, buf.length)) != -1) {
            String s = new String(buf, 0, c);
            //System.out.println(s);
            osw.write(s);
        }     
        isr.close();
        osw.close();
    }

}

   4.文件读写流,FileReader和FileWriter,读取字符文件和写入字符文件的便捷类。

public class FileReaderAndFileWriter {
    public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader("F:\\javaio\\javautf.txt");
        FileWriter fw = new FileWriter("F:\\javaio\\javautf1.txt");
        //FileWriter fw = new FileWriter("F:\\javaio\\javautf1.txt", true);//向指定文件中追加内容
        
        char[] buf = new char[1 * 1024];
        int c;
        while ((c = fr.read(buf, 0, buf.length)) != -1) {
            System.out.println(c);
            fw.write(buf, 0, c);
            fw.flush();
        }
        fr.close();
        fw.close();
    }
}

  5.字符流的过滤器

  BufferedReader,一次读一行

  BufferedWriter/PrintWriter,一次写一行

public class BufRAndBufWOrPrintW {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("F:\\javaio\\javautf.txt")));
        //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("F:\\javaio\\javautf2.txt")));
        PrintWriter pw = new PrintWriter("F:\\javaio\\javautf3.txt");
        
        String s;
        while ((s = br.readLine()) != null) {
            //一次读一行,不能识别换行符
            //bw.write(s);
            //bw.newLine();//写入一个行分隔符
            //bw.flush();
            pw.println(s);//通过写入行分隔符字符串终止当前行
            pw.flush();
        }
        br.close();
        //bw.close();
        pw.close();
    }
}

 

posted @ 2017-05-14 11:48  tianxintian22  阅读(271)  评论(0编辑  收藏  举报