作业:将c盘的一个文本文件复制到d盘。

分析:复制原理:读取c盘文件中的数据,将这些数据写入到d盘当中,连读带写。

/*

* 需求:作业:将c盘的一个文本文件复制到d盘。

* 思路:

* 1,需要读取源,

* 2,将读到的源数据写入到目的地。

* 3,既然是操作文本数据,使用字符流。

*/

第一种方式:

 public class CopyTextTest {
     public static void main(String[] args) throws IOException {
         //1,读取一个已有的文本文件,使用字符读取流和文件相关联。
         FileReader fr = new FileReader("IO流_2.txt");
         //2,创建一个目的,用于存储读到数据。
         FileWriter fw = new FileWriter("copytext_1.txt");
         //3,频繁的读写操作。
         int ch = 0;
         while((ch=fr.read())!=-1){
             fw.write(ch);
         }
         //4,关闭流资源。
         fw.close();
         fr.close();
     }
 }

第二种方式:(循环次数少,效率高。)

 public class CopyTextTest_2 {
     private static final int BUFFER_SIZE = 1024;
     public static void main(String[] args) {
         FileReader fr = null;
         FileWriter fw = null;
         try {
             fr = new FileReader("IO流_2.txt");
             fw = new FileWriter("copytest_2.txt");
             //创建一个临时容器,用于缓存读取到的字符。
             char[] buf = new char[BUFFER_SIZE];//这就是缓冲区。
             //定义一个变量记录读取到的字符数,(其实就是往数组里装的字符个数)
             int len = 0;
             while((len=fr.read(buf))!=-1){
                 fw.write(buf, 0, len);
             }
         } catch (Exception e) {
 //            System.out.println("读写失败");
             throw new RuntimeException("读写失败");
         }finally{
             if(fw!=null)
                 try {
                     fw.close();
                 } catch (IOException e) {

                     e.printStackTrace();
                 }
             if(fr!=null)
                 try {
                     fr.close();
                 } catch (IOException e) {

                     e.printStackTrace();
                 }
         }
     }
 }

原理图:

有缓冲区可以提高效率。

java中把缓冲区封装了。

缓冲区的出现提高了文件的读写效率。

关闭缓冲区就是关闭的被缓冲的流对象!

所以只需要关闭缓冲区就可以,不必要再关闭流了。

复制文件用缓冲区的方式.

 public class CopyTextByBufTest {
     public static void main(String[] args) throws IOException {
         FileReader fr = new FileReader("buf.txt");
         BufferedReader bufr = new BufferedReader(fr);

         FileWriter fw = new FileWriter("buf_copy.txt");
         BufferedWriter bufw = new BufferedWriter(fw);

         String line = null;
         while((line=bufr.readLine())!=null){
             bufw.write(line);
             bufw.newLine();
             bufw.flush();
         }
         /*
         int ch = 0;
         while((ch=bufr.read())!=-1){
             bufw.write(ch);
         }
         */
         bufw.close();
         bufr.close();
     }
 }

关于文件的复制(用InputStream和OutputStream)的更多相关文章

  1. 使用字节流(InputStream、OutputStream)简单完成对文件的复制

    文件的复制 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; imp ...

  2. Java精选笔记_IO流(字节流、InputStream、OutputStream、字节文件、缓冲区输入输出流)

    字节流 操作图片数据就要用到字节流. 字符流使用的是字符数组char[],字节流使用的是字节数组byte[]. 字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是FileInputStre ...

  3. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

  4. OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制

    字节流两套:         java.lang.Object--java.io.OutputStream--java.io.FileOutputStream         java.lang.Ob ...

  5. java文件和文件夹复制、删除、移动操作

    java文件和文件夹复制.删除.移动操作 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...

  6. java的InputStream和OutputStream的理解【转】

    1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生 ...

  7. InputStream和OutputStream

    1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头) 2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产 ...

  8. java(jdk1.7) IO系列01之InputStream和OutputStream解析

    1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,Inpu ...

  9. Java IO流操作汇总: inputStream 和 outputStream【转】

    我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...

随机推荐

  1. winform窗体间利用委托传值(一)

    前台:在winform窗体Form1放入pictureBox1 后台代码: namespace 点击小图变成大图 { public delegate void ClickDelegateHander( ...

  2. uva 11019 Matrix Matcher

    题意:给出一个n*m的字符矩阵T,你的任务是找出给定的x*y的字符矩阵P在T中出现了多少次. 思路:要想整个矩阵匹配,至少各行都得匹配.所以先把P的每行看做一个模式串构造出AC自动机,然后在T中的各行 ...

  3. 【原创】alias与export

    最近在看lualua相关的,其中k中有os.getenv('kroot'),看到~/.bashrc理由kroot但是为什么拿不到,后来发现写成了alias了,应该是export的. alias rer ...

  4. Python读取文件内容的三种方式并比较

    本次实验的文件是一个60M的文件,共计392660行内容. 程序一: def one(): start = time.clock() fo = open(file,'r') fc = fo.readl ...

  5. leetcode@ [116/117] Populating Next Right Pointers in Each Node I & II (Tree, BFS)

    https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ Follow up for problem ...

  6. android 的开源输入法介绍,及 自动触摸的实现方法

    输入法的开源代码见我自己的360云盘里的 openwnn-legacy-android-open-ime.tar.bz2 文件 http://www.pocketmagic.net/injecting ...

  7. ubuntu无法进入和引导顺序问题解决

    今天上班过来发现ubuntu无法进入,因为里面有N多资料没有备份,当时很是捉急.不过后来都解决了: 背景: easyBCD安装ubuntu14.07和windows7双系统.基本上这一年多一直用ubu ...

  8. 第十一章、认识与学习 BASH 数据流重导向

    数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给它导向到其他的地方,例如文件或者是装置 (例如打印机之类的)! 什么是数据流重导向 命令运行过程如下: 图 5.1.1.命令运行过程的数据 ...

  9. DS18B20 for STM32 源代码 【worldsing笔记】

    DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式:温度测量范围为-55℃-+125℃,可编程为9位-12位A/D转换精度,测温分辨率可达0.0625℃.主 ...

  10. 弹出框JBox实例

    前几天做的考试系统的一些后台弹出框的一些模板.主要是因为普通的弹出框样式不是很好,颜色也不能调换.这里我们用的是JBox,还是从师傅那得知的.自己小实验了下,这里就做个小结. JBox 插件说明 - ...