IO操作--文件拷贝程序(核心,第七个代码模型)

在Dos系统系统中有一个copy命令,那么要求通过IO操作模拟出copy命令,实现文件拷贝的程序,而两个路径通过初始化参数进行配置(本程序可以不去考虑类的设计结构,所有的代码在主类中编写)
分析思路:
由于拷贝的文件可能是文本也有可能是二进制数据,所以应该使用字节流:
那么对于文件的拷贝操作有两种方式:
方案一:将要拷贝文件的内容一次性全部读取到内容之中,后进行输出
方案二:采用边读边写的方式,读部分内容再输出部分内容
我们一定采用的是方案二
范例:初期实现拷贝
package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Copy {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
long start=System.currentTimeMillis();
//=======================================
if(args.length!=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(-1!=(temp=input.read())) {
output.write(temp);//输出内容
}
input.close();
output.close();
long end=System.currentTimeMillis();
System.out.println("文件拷贝所花费的时间:"+(end-start));
}


}
此时程序需要配置初始化参数,但是Eclipse之中,初始化参数需要将程序先执行一次之后才可以配置
此时一个基本的程序结构就实现完成了,但是本程序存在问题,如果是一个文件量较大的程序,以上的代码根本就不可能完成
范例:修改程序,实现部分的拷贝(重点)
package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Copy {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
long start=System.currentTimeMillis();
//=======================================
if(args.length!=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();
}
byte data[]=new byte[1024];//每次读取1024个数据
InputStream input=new FileInputStream(inFile);//输入流
OutputStream output=new FileOutputStream(outFile);//输出流
int temp=0;//接收每次读取的数据
while(-1!=(temp=input.read(data))) {
output.write(data,0,temp);//输出内容
}
input.close();
output.close();
long end=System.currentTimeMillis();
System.out.println("文件拷贝所花费的时间:"+(end-start));
}


}

猜你喜欢

转载自blog.csdn.net/a584898/article/details/81021986
今日推荐