/*【入】指的是到内存里,【出】指的是到内存外*/
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){}
}
}
04-26 10:54