`
where
  • 浏览: 80556 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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
3
分享到:
评论

相关推荐

    java 编程入门思考

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    java联想(中文)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Java初学者入门教学

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    JAVA_Thinking in Java

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Thinking in Java简体中文(全)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Thinking in Java 中文第四版+习题答案

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    Think in Java(中文版)chm格式

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    asp.net知识库

    事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle...

    ThinkInJava

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    thinkinjava

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Tcl_TK编程权威指南pdf

    place的基础知识 面板管理器 place命令 第26章 将命令与事件编联 bind命令 bindtags命令 事件的语法 修饰符 事件序列 虚拟事件 事件关键词 第4部分 tk组件 第27章 按钮与菜单 按钮命令与作用域问题 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

    javaSE代码实例

    13.1 String类的基础知识 243 13.1.1 对象的创建 243 13.1.2 巧用构造器 244 13.1.3 String类的重要方法 245 13.2 String对象的内存机制 248 13.2.1 一段令人困惑的字符串程序 248 13.2.2 “一次投入,...

    飞鸽传书(IPMessenger) 源码

     开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    C#微软培训资料

    第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 ...

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    框架中的MongoDB项目是我用来作为文件服务器的一个实现,很简单实现了上传下载删除和预览的几个接口,大家可以看源码,有朋友问到秒传怎么做 这里只是简单说一个关键词(MD5)原理自行理解吧 Redis延迟消费的项目是...

Global site tag (gtag.js) - Google Analytics