文件拷贝
linux下文件拷贝命令:"cp 源文件路径 目标文件路径
"
现在希望通过程序来实现这样的操作,即:建立一个copyFile程序类,这个类通过初始化参数接收源文件与目标文 件路径。
分析:
- 要想实现数据的拷贝肯定是要通过流的方式来完成,对于流有两类,由于要拷贝的内容不一定是文字数据,所以此处我们采用字节流。
- 在进行拷贝的时候需要确定模式:a.在程序中开辟一个数组,该数组长度为文件长度,将所有数据一次性读取到该数组中随后进行输出保存。b.采用同边读边写的方式完成。
package www.bit.FileTest;
import java.io.*;
/**
* 建立一个专门负责文件拷贝处理的类,该类具备如下功能:
* 1.判断拷贝的源文件是否存在
* 2.判断目标文件的父路径是否存在,如果不存在则创建父目录
* 3.进行文件拷贝的处理
*/
class CopyFileUtil {
// 此时这个工具类不需要任何属性,
// 建议将构造方法私有化,并且文件操作方法均为类方法
private CopyFileUtil(){}
/**
* 判断要拷贝的源文件路径是否存在
* @param sourceFilePath 输入的源路径信息
* @return 如果该路径真实存在返回true,否则返回false
*/
public static boolean sourceFilePathIsExists(String sourceFilePath){
return new File(sourceFilePath).exists();
}
/**
* 根据传入的目标文件路径判断其父路径是否存在,如果不存在则创建
* @param destFilePath 输出的目标文件地址,根据此地址判断父路径是否存在。不存在则创建
*/
public static void destFilePathExists(String destFilePath){
File file = new File(destFilePath);
if (!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
}
/**
* 文件拷贝
* @param sourceFilePath 源文件绝对路径
* @param destFilePath 目标文件绝对路径
* @return 是否拷贝成功
* @throws Exception
*/
public static boolean copyFile(String sourceFilePath,String destFilePath) throws Exception{
File sourceFile = new File(sourceFilePath);
File destFile = new File(destFilePath);
InputStream inputStream = new FileInputStream(sourceFile);
OutputStream outputStream = new FileOutputStream(destFile);
long startTime = System.currentTimeMillis();
copyFileHandle(inputStream,outputStream);
long endTime = System.currentTimeMillis();
System.out.println("文件拷贝结束,共耗时" + (endTime-startTime) + "毫秒");
return true;
}
/**
* 实现具体的文件拷贝操作
* @param inputStream 输入流对象
* @param outputStream 输出流对象
* @throws Exception
*/
private static void copyFileHandle(InputStream inputStream,
OutputStream outputStream)throws Exception{
int len = 0;
byte[] data = new byte[1024]; // 开辟缓冲区一次性读入多个内容
while ((len = inputStream.read(data)) != -1){ // 表示将数据读取到字节数组之中,而后返回读取个数
outputStream.write(data,0,len); // 将字节数组的部分内容写到目标文件中
}
inputStream.close();
outputStream.close();
}
}
public class CopyFile {
public static void main(String[] args) throws Exception {
if (args.length != 2){
System.out.println("非法操作,命令为: java CopyFile 源文件路径 目标文件路径");
return;
}
String sourceFilePath = args[0]; // 取得源文件路径
String destFilePath = args[1]; // 取得目标路径
if (CopyFileUtil.sourceFilePathIsExists(sourceFilePath)){
CopyFileUtil.destFilePathExists(destFilePath);
System.out.println(CopyFileUtil.copyFile(sourceFilePath,destFilePath)
? "文件拷贝成功" : "文件拷贝失败");
}else {
System.out.println("源文件不存在,无法进行拷贝");
}
}
}