希望利用程序来实现文件的拷贝。通过初始化参数接收源文件和目标文件的路径,完成拷贝方法。实现:实现数据拷贝需要通过流 字节流比较合适。在进行拷贝的过程中 在程序中开辟一个数组,这个数组的长度为文件的长度,将所有的数据一次性读取到该数组中,随后将该数组进行输出。应该采用边读、边写的方式来完成。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;/**
- 建立一个专门负责拷贝的类 其目标是
- 1、检验源文件是否存在
- 2、需要判断目标文件的父路径是不是存在,不存在则创建一个
- 3、完成文件拷贝的操作
/
class CopyUtil{// 建议 因为类不需要保存任何的属性,所以建议将该类的构造方法私有化,使用static 方法
private CopyUtil() {}
/* - 写方法的过程时候采用这种方法写注释,可以为了方便以后知道这个方法时用来干什么的
- @param path是输入源文件的路径
- @return 如果该文件源文件存在,则返回一个true,否则返回false
/
public static boolean fileExists(String path) {//用来判断该源文件是否存在,即目标1
return new File(path).exists();
}
/* - 根据其传入的路径来判断父路径是否存在,如果不存在则创建
- @param path 是要操作的路径,通过该路径取得其父路径
/
public static void creatParentDir(String path) {
File file=new File(path);
if(!file.getParentFile().exists()) {//路径假如不存在,则创建父路径
file.getParentFile().mkdir();//创建一个父路径
}
}
/* - 实现文件拷贝的处理
- @param srcPath源文件路径
- @param desPath目标文件路径
- @return 拷贝完成返回true,否则返回false
/
public static boolean copy(String srcPath,String desPath){
boolean flag=false;
File inFile=new File(srcPath);
File outFile=new File(desPath);
InputStream input =null;
OutputStream output =null;
try{
input=new FileInputStream(inFile);
output=new FileOutputStream(outFile);
copyHandle(input, output);//完成具体的拷贝处理
flag=true;//如果没有异常,则一定会执行到这条语句。
}
catch(Exception e){
flag=false;
}finally {
try {
input.close();
output.close();
}
catch (IOException e) {}
}
return flag;
}
/* - 实现具体的文件拷贝操作
- @param input 输入流对象
- @param output 输出流对象
*/
private static void copyHandle(InputStream input,OutputStream output)throws IOException {
//InputStram 有一个读取单个字节的做法 int read();
//OutputStram 有一个输出单个字节的做法 int write(int data);
long start=System.currentTimeMillis();
int temp=0;
// do {
// temp=input.read();
// output.write(temp);
// }while(temp!=-1);//如果有数据则一直读取,直到读完所有的数据为止
byte data[]=new byte [2048];
while((temp=input.read())!=-1){//表示读取输入流的一个字节,再判断读取后的字节(保存在temp 中)是否为-1,
output.write(data,0,temp);//以上的方法针对的还是一个字节。但是为了加速,需要开辟一个字节数组。
}
long end=System.currentTimeMillis();
System.out.println(“拷贝共用时”+(end-start)+“毫秒”);
}
}
public class CopyTest { public static void main(String[] args) {
if(args.length!=2) {//现在的参数不是2
System.out.println(“错误的执行方式、命令调用:Java copy源文件路径 目标文件路径”);
System.exit(1);//系统退出
}
if(CopyUtil.fileExists(args[0])) {// 判断源文件是否存在?
CopyUtil.creatParentDir(args[1]);//创建目标的父目录
System.out.println(CopyUtil.copy(args[0], args[1]) ? “文件拷贝成功”:“文件拷贝失败”);
}else {
System.out.println(“对不起 源文件不存在”);
}
}
}
如果数据要求在InputSream需要输出,就采用以上的模型。