IO  —— 使用打印流实现文件的复制

PrintWriter 是一个经常使用的很重要的流,并且它是一个高级流(包装流),它可以实现一行一行地“打印”(对字符数据进行操作)。

例1:对打印流的初级认识

/**
 * Created by liwei on 16/7/19.
 *
 * 需求:把一个文件复制到另一个文件中。
 * 数据源:
 * 读取数据 -- FileReader -- BufferedReader
 * 目的地:
 * 写出数据 -- FileWriter -- BufferedWriter -- PrintWriter
 *
 */
public class CopyFileDemo {

    /*public PrintWriter(OutputStream out, boolean autoFlush) {
        this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);

        // save print stream for error propagation
        if (out instanceof java.io.PrintStream) {
            psOut = (PrintStream) out;
        }
    }*/

    public static void main(String[] args) throws IOException {
        // 以前的版本
        // 封装数据源
        // BufferedReader br = new BufferedReader(new FileReader(
        // "DataStreamDemo.java"));
        // // 封装目的地
        // BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
        //
        // String line = null;
        // while ((line = br.readLine()) != null) {
        // bw.write(line);
        // bw.newLine();
        // bw.flush();
        // }
        //
        // bw.close();
        // br.close();

        // 打印流的改进版
        // 封装数据源
        BufferedReader br = new BufferedReader(new FileReader("src/com/liwei/io1/DataStreamDemo.java"));
        // 封装目的地
        // 【重要】PrintWriter 的源代码里就有高效流 BufferedWriter
        PrintWriter pw = new PrintWriter(new FileWriter("copy.java"),true);

        String line = null;
        while ((line=br.readLine())!=null){
            pw.println(line);
        }
        pw.close();
        br.close();
    }
}

例2:对打印流的进一步认识(重要)

/**
 * Created by liwei on 16/7/19.
 * 打印流:
 * 字节打印流 PrintStream
 * 字符打印流 PrintWriter
 *
 * 打印流的特点:
 * (1)只有写数据的功能,没有读取数据的功能。只能操作目的地,不能操作数据源
 * (2)可以操作任意类型的数据(非常重要)
 * (3)如果启动了自动刷新,能够自动刷新
 * (4)这个流是可以直接操作文本文件的
 * 哪些流对象是可以直接操作文本文件的呢?
 *          FileInputStream
 *          FileOutputStream
 *          FileReader
 *          FileWriter
 *          PrintStream
 *          PrintWriter
 *          看API,查流对象的构造方法,如果同时有File类型和String类型的参数,一般来说就是可以直接操作文件的。
 *
 *          流:
 *              基本流:就是能够直接读写文件的
 *              高级流:在基本流基础上提供了一些其他的功能
 *
 */
public class PrintWriterDemo {

    public static void main(String[] args) throws FileNotFoundException {
        // 作为 Writer 类的子类使用
        PrintWriter pw = new PrintWriter("pw.txt");
        pw.write("liwei");
        pw.write("zhouguang");
        pw.write("wudi");
        pw.flush();
        pw.close();
    }
}

例3:打印流的构造方法里有自动刷新的设置

建议参看官方文档深入学习打印流。
以下的描述来自 JDK 官方文档。

与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。

/**
 * Created by liwei on 16/7/19.
 * 1、PrintWriter 可以操作任意类型的数据;
 * print()
 * println()
 *
 * 2、启动自动刷新
 * PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"),true);
 * 还是应该调用 println() 方法才可以实现自动刷新
 * 这个时候不仅仅自动刷新,还实现了数据的换行。
 *
 * println() 等价于
 * pw.write();
 * pw.newLine();
 * pw.flush();
 *
 */
public class PrintWriterDemo2 {

    public static void main(String[] args) throws IOException {
        // 创建打印流对象
        PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"),true);
        // 靠 write() 方法是搞不定的
        // 我们可以尝试使用新的方法
        pw.println("今天是个好日子");
        pw.println("心想的事儿都能成");
        pw.println("明天又是好日子");
        pw.println("打开了家门咱迎春风");
        pw.println(true);
        pw.println(14.19);
        pw.close();
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值