/*【入】指的是到内存里,【出】指的是到内存外*/
import java.io.*; public class MyReadFile{
public static void main(String[] args){
try{
/*第一步,定位数据源&&目标文件*/
File f = new File("D:/lab_2/test.txt");
File f2 = new File("D:/lab_2/test2.txt"); /*第二步,建立输入&&输出管道*/
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(f2); /*第三步,操作管道*/
for(;fis.available() > 0;)
fos.write(fis.read()); }catch(Exception e){}
}
}

由于是一个字节一个字节的读写,在文件稍微大一点的时候(大于1MB)时,速度会非常的慢。

稍作修改即可,每次1000个字节读写。

       byte[] tmp = new byte[1000];
for(;fis.available() > 0;)
fis.read(tmp);
fos.write(tmp);

据说2的n次方计算机处理效率会更快。

            byte[] tmp = new byte[8192];
for(;fis.available() > 0;)
fis.read(tmp);
fos.write(tmp);

最后是标准版。

/*第三步,操作管道*/
byte[] tmp = new byte[8192];
//处理大部分内容
int length = fis.available()/8192;
for(int i = 0; i < length; i ++){
fis.read(tmp);
fos.write(tmp);
}
//处理最后剩下的内容
int size = fis.read(tmp);
fos.write(tmp, 0, size);
/*
*/
import java.io.*;

public class MyReadFile{
public static void main(String[] args){
try{
/*定位数据源&&定位目标文件*/
File f = new File("D:/lab_2/test.txt");
File f_copy = new File("D:/lab_2/test2.txt"); /*建立将数据从硬盘输入到内存的管道
&&建立将数据从内存输出到硬盘的管道*/
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(f_copy); /*操作管道---->传输数据*/
byte[] tmp = new byte[8192];
/*建立一个临时的array用于一次性大量读写,提高读写大文件的效率*/ /*********复制大部分数据******假设总共有8192+1024byte*****/ int length = fis.available()/8192; /*根据假设length = 1*/ /*这里除完后会有余数(长度小于8192),也就是会剩下一段数据读不到,
如果int length = fis.available()/8192 + 1;多读一次的话,
结果复制的文件会比源文件大,因为实际剩余的长度不足8192。*/ for(int i = 0; i < length; i ++){
fis.read(tmp);
fos.write(tmp);
} /*根据假设复制了8192byte*/ /**********复制剩下的数据**********根据假设还有1024byte***********/
int left_length = fis.available(); /*根据假设left_length = 1024*/ fis.read(tmp, 0, left_length);
fos.write(tmp, 0, left_length); /*根据假设复制了1024byte*/ }catch(Exception e){}
}
}

FileCopy的更多相关文章

  1. 实现FileCopy(Ring0 x86 x64)

    1.1 内核不接受一个字符串文件路径,必须填写一个OBJECT_ATTRIBUTES结构. 这个结构,在InitializeObjectAttributes初始化 typedef struct _OB ...

  2. 这个类复制文本文件FileCopy

    package JBJADV003; import java.io.File;import java.io.BufferedReader;import java.io.BufferedWriter;i ...

  3. FileCopy方法

    复制文件. 语法 FileCopy源,目标 FileCopy 语句语法包含以下命名参数: 部分 说明 source 必需. 指定要复制的文件的名称的字符串表达式. _源_可能包含目录或文件夹,和驱动器 ...

  4. FileCopy文件复制

    package cn.com.filecopy; import java.io.FileInputStream; import java.io.FileNotFoundException; impor ...

  5. Java实现本地 fileCopy

    前言: Java中流是重要的内容,基础的文件读写与拷贝知识点是很多面试的考点.故通过本文进行简单测试总结. 2.图展示[文本IO/二进制IO](这是参考自网上的一张总结图,相当经典,方便对比记忆) 3 ...

  6. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  7. 20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  8. VB6与VB.NET对照表

    VB6与VB.NET对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1.It ...

  9. 将word文档A表格中的内容拷贝到word文档B表格中

    Function IsFileExists(ByVal strFileName As String) As Boolean ) <> Empty Then IsFileExists = T ...

随机推荐

  1. Linux下Nagios的安装与配置

    一.本文说明 本文是在参考:http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html   David_Tang文章以及网上的一些资料完 ...

  2. Android Studio解决unspecified on project app resolves to an APK archive which is not supported

    出现该问题unspecified on project app resolves to an APK archive which is not supported as a compilation d ...

  3. java 23种设计模式及具体例子 收藏有时间慢慢看

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  4. B类地址

    从 128.0.0.0 到 191.255.255.254 的单址广播 IP 地址.前两个八位字节指明网络,后两个八位字节指明网络上的主机.B类地址范围:128.0.0.1到191.255.255.2 ...

  5. stl map底层之红黑树插入步骤详解与代码实现

    转载注明出处:http://blog.csdn.net/mxway/article/details/29216199 本篇文章并没有详细的讲解红黑树各方面的知识,只是以图形的方式对红黑树插入节点需要进 ...

  6. YTU 3008: 链串的基本运算

    3008: 链串的基本运算 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 题目描述 编写一个程序,实现链串的各种基本运算,主函数已给出,请补充每一种方法. 1.建立串s ...

  7. hdu5514Frogs(2015ACM-ICPC沈阳赛区F题)

    这题很容易转化到一个容斥计数问题.而用指数复杂度的枚举计数法显然会挂,只能考虑别的方法. 首先将a[i]用gcd(a[i], m)替换,排序去重后得到一组m的约数,而m不超过1e9,因此m的所有约数最 ...

  8. 山东理工大学第七届ACM校赛-飞花的鱼塘 分类: 比赛 2015-06-26 10:30 43人阅读 评论(0) 收藏

    飞花的鱼塘 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 一日,飞花壕在稷下湖游玩,忽然,飞花巨有了一个养鱼的想法,于是,他大手 ...

  9. vim退出

    esc退出编辑模式 :wq  保存后退出vi :w    保存但不退出 :q    离开 vi :q!   若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案

  10. 2016年11月18日 星期五 --出埃及记 Exodus 20:9

    2016年11月18日 星期五 --出埃及记 Exodus 20:9 Six days you shall labor and do all your work,六日要劳碌作你一切的工,