JAVA基础知识之我的理解7(关于File的一点总结,学习再继续,大家一起努力)

文件复制总结

开篇废话:

  最近渐渐习惯了蓝杰的学习,有点渐入佳境的感觉(仅是个人感觉),但是总的进度还是略有落后,安卓还没开始,还停留在刚刚构建好的层面,虽然听了两节课,但说实话没什么感觉,可能是没有练习的缘故。,写完这篇就开始搞之。最近还发现自己一个问题,在代码中会犯一些粗心的错误,而这些错误在找的时候又不那么容易,所以以后还要谨慎些。总的来说我这个阶段过的还OK。学习再继续大家一起努力在某求职节目看到这么一句话拿来与大家共勉(“我走的很慢,但我从未停下前进的脚步”)

谈文件复制思想:首先我们的程序先要获取要复制文件的文本内容,然后再将传入的内容通过程序传出到另一个我们新创建文件中,大的思想是这样的。但在具体实现过程中还有一些小的细节。

谈实现:

 1)实现“程序先要获取要复制文件的文本内容”

    在实现这个功能时我们用到InputStream这个抽象类的实现类FileInputStream,在创建了这个实现类的对象以后我们会用到read()方法这样我们就可以获取到目标文件的内容

 2)实现“将传入的内容通过程序传出到另一个我们新创建文件中”

    在实现这个功能时我们会用到OutputStream这个抽象类的实现类FileOutputStream,这个实现类同样会有三个write方法与read所对应,理论上这样我们就可以完成这个功能。

谈优化:

 readwrite之间我们面临个选择:

 1)我们一次性将文件读完并保存在临时数组中,然后将数组整体传

 2)我们按字节读一个字节传一次

 3)我们每次读一定大小的文件然后传,然后循环这个过程直至传完为止

 分析:

 理论上这三种方法都是行的通的我们可以分析一下哪个更好。

 第一种方法如果在文件不大时,当然是很好,用的时间也少,但是当文件很大时我们很难用一个数组来存,这就是理想与现实之间的尴尬。

 第二种方法在我们是现实时会发现它会用很长时间,这个多用的时间是多用在我们传输次数太多,显然这个想法不好。

 第三种方法可一说是对第一二种方法的优化,只要我们把握好“一定大小”我们可以在短时间完成这个任务。

 以上这么说可能有点抽象且枯燥,用一个比喻大家就懂了(PS这个比喻出自左哥,由于比喻的很贴切,where稍加改动引用之)

  大家都搬过宿舍吧,假如你要从七楼搬到五楼,你每次只拿一本书,这样你恐怕搬一天都搬不完,你要是力量无限大,一次性搬下来这当然最省事,但这显然是不现实的,我们正常时先打包,然后每次搬一包(当然这一包是你力所能及的最大化)这样的话我们肯定是最快的。

具体代码:

package exercise0814;

 

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

 

/**

 * 文件复制

 * @author where

 *

 */

public class Filecopy {

         /**

          * 主函数入口

          * @param args

          */

         public static void main(String[] args){

        //这是where在桌面创的文件

                   String path ="C:\\Users\\lenovo\\Desktop\\aa.txt";

       // 复制文件

                   String path1 = "C:\\Users\\lenovo\\Desktop\\dd.txt";

                   Filecopy f = new Filecopy();

                   f.copyfile(path,path1);

         

         }

         /**

          * 复制文件的方法

          * 

          */

         public void copyfile(String path,String path1){

                   long time = System.currentTimeMillis();

                   try{

                            //创建文件输入流对象

                            InputStream ins = new FileInputStream(path);

                            //创建输出流管道

                            OutputStream ous = new FileOutputStream(path1);

                            //从输入流管道中读取数据

                            byte[] b = new byte[500];//每次取100个数据传输

                            int a;

                            //当文件仍没被传输完时

                            while((a=ins.read(b))!=-1){

                                     ous.write(b);

                            }

            }

                   catch(Exception ef){

                            ef.printStackTrace();

                   }

                   //统计程序执行时间

                   long time1 = System.currentTimeMillis();

                   System.out.println("复制用时:"+(time1-time)+"毫秒");

         }

         

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值