IO —— 使用打印流实现文件的复制
2016-07-24 08:05
351 查看
PrintWriter 是一个经常使用的很重要的流,并且它是一个高级流(包装流),它可以实现一行一行地“打印”(对字符数据进行操作)。
以下的描述来自 JDK 官方文档。
与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。
例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(); } }
相关文章推荐
- Mysql IO 内存方面的优化
- Node.js 的异步 IO 性能探讨
- SQL Server误区30日谈 第22天 资源调控器可以调控IO
- mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
- java中的Io(input与output)操作总结(一)
- GO语言的IO方法实例小结
- java中的Io(input与output)操作总结(四)
- C#路径,文件,目录及IO常见操作汇总
- SQL语句实现查询当前数据库IO等待状况
- Java进阶教程之IO基础
- java中的Io(input与output)操作总结(三)
- Java 1.0和Java 1.1 的IO类的比较
- Java中的BufferedInputStream与BufferedOutputStream使用示例
- JAVA IO API使用详解
- Java NIO和IO的区别
- Java编程中最基础的文件和目录操作方法详解
- Python中使用select模块实现非阻塞的IO
- Python通过poll实现异步IO的方法
- Python通过select实现异步IO的方法
- Java编程中字节流与字符流IO操作示例