Java关于IO流的介绍(3)

二、字符流讲解

  以字符为导向的 ------Writer和Reader(抽象类)

  1.FileReader和FileWriter

  FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。

   FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的.

  下面见一个例子:

package com.chen.test;

import Java.io.*;

/**
 *
 * @author 陈家小帅
 *
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        String path1 = "E:/WorkSpace/Mouth/bin/Dest.txt";
        String path2 = "E:/WorkSpace/Mouth/bin/D.txt";
        ReadByFR(path1, path2);
    }
/**
    * 使用FileReader将一个文件的内容写入到另一个文件中,并在控制台输出
    *
    * @param path1
    * @param path2
    * @throws Exception
    */
    public static void ReadByFR(String path1, String path2) throws Exception {
        FileReader fr = new FileReader(path1);
        FileWriter fw = new FileWriter(path2);
        // 1.将一个文件的内容读出,写入
        char[] buffer = new char[1024];
        int len;
        while ((len = fr.read(buffer)) > -1) {        //将数据读到char数组中
            fw.write(buffer, 0, len);
       fw.flush();
            String s = new String(buffer, 0, len);
            System.out.println(s);
        }
        fw.close();
        fr.close();
    }

 2.BufferedReader和BufferedWriter

BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。

下面是个例子:

package com.chen.test;
import java.io.*;

/**
 *
 * @author 陈家小帅
 *
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        String path1 = "E:/WorkSpace/Mouth/bin/Dest.txt";
        String path2 = "E:/WorkSpace/Mouth/bin/D.txt";
        ReadByBR(path1, path2);
    }
/**
    * 使用BufferdeReader将一个文件的内容写入到另一个文件中,并在控制台输出
    *
    * @param path1
    * @param path2
    * @throws Exception
    */
    public static void ReadByBR(String path1, String path2) throws Exception {
        BufferedReader fr = new BufferedReader(new FileReader(path1));
        BufferedWriter fw = new BufferedWriter(new FileWriter(path2));
     //PrintStream ps = new PrintStream(path2);
        String len;
        while ((len = fr.readLine()) != null) {
            fw.write(len);
            fw.flush();
        //ps.println(len);
        //ps.flush();
            System.out.println(len);
        }
        fw.close();
        fr.close();
    }
}

3.InputStreamReader和OutputStreamWriter

InputStreamReader 是字节流通向字符流的桥梁:每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。

要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

  OutputStreamWriter 是字符流通向字节流的桥梁:

  每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。

  可以指定此缓冲区的大小注意,传递给 write() 方法的字符没有缓冲。

package com.chen.test;

import java.io.*;

/**
 *
 * @author 陈家小帅
 *
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        String path1 = "E:/WorkSpace/Mouth/bin/Dest.txt";
        String path2 = "E:/WorkSpace/Mouth/bin/D.txt";
        ReadByIS(path1, path2);
    }

/**
    * 使用inputStreamReader将一个文件的内容写入到另一个文件中,并在控制台输出
    *
    * @param path1
    * @param path2
    * @throws Exception
    */
    public static void ReadByIS(String path1, String path2) throws Exception {
        InputStreamReader isr = new InputStreamReader(
                new FileInputStream(path1));
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
                path2));
        char[] cha = new char[1024];
        int len;
        while ((len = isr.read(cha)) > -1) {
            System.out.println(new String(cha, 0, len));
            osw.write(cha, 0, len);
            osw.flush();
        }
        osw.close();
        isr.close();
    }
}

以上便是本人的一些见解,如有不对,还望指出!!!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/de98a15c32c69e323f65017ebb47404c.html