package iotest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class testcopy {//先设置好初始化参数 2个文件
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
long start = System.currentTimeMillis();
if(args.length != 2){// 初始化参数的个数不是2位
System.out.println("命令执行错误");
System.exit(1); // 退出程序
}
File infile = new File(args[0]); // 第一个文件设置好路径
if(!infile.exists()){//源文件不存在
System.out.println("源文件不存在");
System.exit(1);//程序退出
}
File outfile = new File(args[1]);// 设置好输出文件路径
if(!outfile.getParentFile().exists()){ //输出文件路径不存在
outfile.getParentFile().mkdirs();//创建目录
}
InputStream input = new FileInputStream(infile);
OutputStream output = new FileOutputStream(outfile);
//实现文件拷贝
int temp = 0; //保存每次读取单个字节
while((temp = input.read()) != -1){//每次读取单个字节
output.write(temp);//每次输出单个字节
}
input.close();
output.close();
long end = System.currentTimeMillis();
System.out.println("拷贝所花费的时间:"+ (end - start));
}
上述代码实现了文件边读边写的操作,需要设置初始化main()的2个文件参数,现在是单字节读写速度很慢,每一次读取一个字节。
回顾一下前面学过两个字节流的操作方法:
· InputStream: public int read(byte[] b) throwss IOException
`将内容读取到字节数组之中,如果没有数据了返回的是-1,否则是就是数组的长度
`OutputStream: public void write(byte[] b, int off , int len) throws IOException
·要设置的字节数组实际上就是在read()方法里面使用的数组
·一定是从字节数组的第0个元素开始输出,输出读取的数据长度
改进拷贝的代码:
package iotest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class testcopy {//先设置好初始化参数 2个文件
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
long start = System.currentTimeMillis();
if(args.length != 2){// 初始化参数的个数不是2位
System.out.println("命令执行错误");
System.exit(1); // 退出程序
}
File infile = new File(args[0]); // 第一个文件设置好路径
if(!infile.exists()){//源文件不存在
System.out.println("源文件不存在");
System.exit(1);//程序退出
}
File outfile = new File(args[1]);// 设置好输出文件路径
if(!outfile.getParentFile().exists()){ //输出文件路径不存在
outfile.getParentFile().mkdirs();//创建目录
}
InputStream input = new FileInputStream(infile);
OutputStream output = new FileOutputStream(outfile);
//实现文件拷贝
int temp = 0; //保存每次读取单个字节
byte [] date = new byte[1024];//每次读取1024个字节
//将每次读取进来的数据保存在字节数组里面,并且返回读取的个数
while((temp = input.read(date)) != -1){//每次读取单个字节
output.write(date,0,temp);//每次输出单个字节
}
input.close();
output.close();
long end = System.currentTimeMillis();
System.out.println("拷贝所花费的时间:"+ (end - start));
}
}