更正一下上午发的用FileInputStream和FileOutputStream复制文件,利用数组的方法改善其性能。
首先要多谢各位大神的指点,小生刚接触Java不久,人也不够聪明,很多都不太会,想法太简单,写出的东西也就过于简单。还得请各位大神多多指教啊 :) :) :)
下面要回归到主题,讲一下自己考虑不周全的地方,虽然用了数组来作为缓存区,但是没考虑文件的大小,及数组的长度。听了大神的指点后,便在数组长度方面做了测试,数组的长度设置大一些速度相对快一些,但是也并不是越大越好,因为数组长度越大占用的内存就越大,同样会降低速度,所以最适合的数组长度要经过测试才能知道多大最合适,我测试的时候数组的长度在100000的时候速度相对来说是最快的。(这个可能要根据情况不同来定 :wink: )下面就附上我听大神指点后再写的代码。
/**
* 提高文件复制效率:例如要将F:\sun\上课笔记\cc.txt中的内容复制到F:\sun\上课笔记\q.txt中, cc.txt的大小随意 */
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Homeworkcopy3 {
public static void main(String[] args) {
try {
//根据文件路径创建文件输入流
FileInputStream input=new FileInputStream("F:\\sun\\上课笔记\\cc.txt");
// 根据文件路径创建文件字节输出流, 如果文件不存在,就会自动创建这个文件
FileOutputStream output=new FileOutputStream("F:\\sun\\上课笔记\\q.txt");
//创建一个文件复制前的时间
long time = System.currentTimeMillis();
//创建一个字符数组并给它的长度赋值,长度可以自己任意定,用来作为中间数组存放流中的数据
byte[] b=new byte[500];
try {
//输入流中的字节数如果不为0就继续进行读取和写入
while(input.available()!=0){
//从输入流中读取字节填充b数组
input.read(b);
//将b数组中的所有字节写到输出流中
output.write(b);
}
//刷新此输出流并强制写出所有缓冲的输出字节
output.flush();
//关闭输出流
output.close();
//关闭输入流
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//定义一个结束时间,计算文件复制时间
long time1 = System.currentTimeMillis();
System.out.println(time1-time);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
首先要多谢各位大神的指点,小生刚接触Java不久,人也不够聪明,很多都不太会,想法太简单,写出的东西也就过于简单。还得请各位大神多多指教啊 :) :) :)
下面要回归到主题,讲一下自己考虑不周全的地方,虽然用了数组来作为缓存区,但是没考虑文件的大小,及数组的长度。听了大神的指点后,便在数组长度方面做了测试,数组的长度设置大一些速度相对快一些,但是也并不是越大越好,因为数组长度越大占用的内存就越大,同样会降低速度,所以最适合的数组长度要经过测试才能知道多大最合适,我测试的时候数组的长度在100000的时候速度相对来说是最快的。(这个可能要根据情况不同来定 :wink: )下面就附上我听大神指点后再写的代码。
/**
* 提高文件复制效率:例如要将F:\sun\上课笔记\cc.txt中的内容复制到F:\sun\上课笔记\q.txt中, cc.txt的大小随意 */
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Homeworkcopy3 {
public static void main(String[] args) {
try {
//根据文件路径创建文件输入流
FileInputStream input=new FileInputStream("F:\\sun\\上课笔记\\cc.txt");
// 根据文件路径创建文件字节输出流, 如果文件不存在,就会自动创建这个文件
FileOutputStream output=new FileOutputStream("F:\\sun\\上课笔记\\q.txt");
//创建一个文件复制前的时间
long time = System.currentTimeMillis();
//创建一个字符数组并给它的长度赋值,长度可以自己任意定,用来作为中间数组存放流中的数据
byte[] b=new byte[500];
try {
//输入流中的字节数如果不为0就继续进行读取和写入
while(input.available()!=0){
//从输入流中读取字节填充b数组
input.read(b);
//将b数组中的所有字节写到输出流中
output.write(b);
}
//刷新此输出流并强制写出所有缓冲的输出字节
output.flush();
//关闭输出流
output.close();
//关闭输入流
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//定义一个结束时间,计算文件复制时间
long time1 = System.currentTimeMillis();
System.out.println(time1-time);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}