package cn.yhy.demo;
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.实现复制操作;
* @author yuhy
*
*/
class CopyUtil{
private CopyUtil() {}
public static boolean fileExists(String path) { //判断源文件是否存在
return new File(path).exists();
}
public static void creatParentDirectory(String path) { //创建父路径
File file = new File(path);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
}
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 {
//InputStream类是一个抽象类,对文件进行处理使用FileInputStream类完成;
//OutputStream类是一个抽象类,对文件进行处理使用FileOutputStream类完成;
input = new FileInputStream(inFile); //字节输入流
output = new FileOutputStream(outFile); //字节输出流
copyHandle(input,output); //实际拷贝处理
flag = true;
} catch (IOException e) {
flag = false;
} finally {
try {
input.close();
output.close();
} catch (IOException e) {}
}
return flag;
}
private static void copyHandle(InputStream input,OutputStream output) throws IOException { // 实际拷贝处理过程
long start = System.currentTimeMillis(); //获得系统当前时间
int temp = 0;
byte data[] = new byte[1024]; //创建一个字节数组
while ((temp = input.read(data)) != -1) { //不是-1,表示还有内容
output.write(temp);
}
long end = System.currentTimeMillis();
System.out.println("【统计】拷贝共花费时间:" + (end - start) + "毫秒");
}
}
public class Copy{
public static void main(String args[]) throws IOException {
if (args.length != 2) { //源文件路径及目标文件路径是2个对象
System.out.println("执行方式错误,请按照java Copy 源文件路径 目标文件路径 进行执行");
System.exit(1); //系统退出
}
if (CopyUtil.fileExists(args[0])) { //如果源文件存在,则进行拷贝
CopyUtil.creatParentDirectory(args[1]); //创建目标文件路径
System.out.println(CopyUtil.copy(args[0], args[1]) ? "文件拷贝完成!" : "文件拷贝出现错误!"); //三元表达式
} else {
System.out.println("拷贝未能进行,源文件不存在!");
}
}
}