/*【入】指的是到内存里,【出】指的是到内存外*/
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. netstat -aon|findstr 8888 终止进程

    netstat -aon|findstr 8888 # 根据端口号查找进程C:\Users\Administrator>netstat -ano | findstr TCP LISTENING ...

  2. VS 6.00 工程项目文件详解

    *.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的.*.dsw(Develo ...

  3. expect语法

    沙河西ftp上传,使用了expect语言的脚本. 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自 ...

  4. Oracle truncate和delete的区别

    首先truncate是DDL语句,而delete是DML语句. truncate的删除比delete快很多,尤其是表数据量大的时候,原因是truncate执行过程中不产生undo,所以truncate ...

  5. c#xml追加读取节点

    读取 if (File.Exists("Book.xml")) { XmlDocument doc = new XmlDocument(); doc.Load("Book ...

  6. Inviting Friends(二分+背包)

    Inviting Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...

  7. Antenna Placement

    Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7574 Accepted: 3762 Des ...

  8. SharePoint自动化系列——Site/Web/List级别的导航菜单

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 需求:在不同的测试用例中,对脚本中不确定的因素需要和用户交互来确定,比如选择哪个site,选择哪个 ...

  9. Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系

    1.Surface Surface extends Objectimplements Parcelable java.lang.Object    ↳ android.view.Surface Cla ...

  10. 方法参数out

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace _050505 ...