版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/slh2016/article/details/80848316
1. 文件拷贝
package IOKnowledge;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 文件拷贝处理
* @author sunlh
*
*/
public class Test {
public static void main(String[] args) throws Exception {
if(args.length != 2) {// 程序执行出错
System.out.println("命令执行错误,执行结构:java Test 拷贝源文件路径 拷贝目标文件");
System.exit(1);
}
long start = System.currentTimeMillis();
FileUtil fu = new FileUtil(args[0], args[1]);
System.out.println(fu.copy()?"文件拷贝成功":"文件拷贝失败");
long end = System.currentTimeMillis();
System.out.println("拷贝完成的时间:" + (end - start));
}
}
/**
* 文件操作工具类
* @author sunlh
*
*/
class FileUtil{
private File srcFile;// 源文件路径
private File desFile;// 目标文件路径
public FileUtil(String src, String des) {
this(new File(src), new File(des));
}
public FileUtil(File srcFile, File desFile) {
this.srcFile = srcFile;
this.desFile = desFile;
}
public boolean copy() throws Exception {// 文件拷贝处理
if (!this.srcFile.exists()) {// 源文件必须存在
System.out.println("拷贝的源文件不存在");
return false;// 拷贝失败
}
if (!this.desFile.getParentFile().exists()) {// 创建父目录
this.desFile.getParentFile().mkdirs();
}
byte [] data = new byte[1024];// 开辟一个拷贝的缓冲区
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(this.srcFile);
output = new FileOutputStream(this.desFile);
int len = 0;
// 1.读取数据到数组之中,随后返回读取个数
// 2.判断个数是否是-1,如果不是则进行写入
while((len = input.read(data)) != -1) {
output.write(data, 0, len);
}
return true;
} catch (Exception e) {
throw e;
} finally {
if (input != null) {
input.close();
}
if (output != null) {
output.close();
}
}
}
}
2. 文件夹拷贝
package IOKnowledge;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 文件拷贝处理
* @author sunlh
*
*/
public class Test {
public static void main(String[] args) throws Exception {
if(args.length != 2) {// 程序执行出错
System.out.println("命令执行错误,执行结构:java Test 拷贝源文件路径 拷贝目标文件");
System.exit(1);
}
long start = System.currentTimeMillis();
FileUtil fu = new FileUtil(args[0], args[1]);
if(new File(args[0]).isFile()) {// 文件拷贝
System.out.println(fu.copy()?"文件拷贝成功":"文件拷贝失败");
} else {// 目录拷贝
System.out.println(fu.copyDir()?"文件拷贝成功":"文件拷贝失败");
}
long end = System.currentTimeMillis();
System.out.println("拷贝完成的时间:" + (end - start));
}
}
/**
* 文件操作工具类
* @author sunlh
*
*/
class FileUtil{
private File srcFile;// 源文件路径
private File desFile;// 目标文件路径
public FileUtil(String src, String des) {
this(new File(src), new File(des));
}
public FileUtil(File srcFile, File desFile) {
this.srcFile = srcFile;
this.desFile = desFile;
}
// 目录拷贝
public boolean copyDir() throws Exception {
try {
this.copyImpl(this.srcFile);
return true;
} catch (Exception e) {
return false;
}
}
private void copyImpl(File file) throws Exception {
if (file.isDirectory()) {// 是目录
File [] results = file.listFiles();
if (results != null) {
for(int i = 0; i < results.length; i++) {
copyImpl(results[i]);
}
}
} else {// 是文件
String newFilePath = file.getPath().replace(this.srcFile.getPath() + File.separator, "");
File newFile = new File(this.desFile, newFilePath); //拷贝的目标路径
copyFileImpl(file, newFile);
}
}
private boolean copyFileImpl(File srcFile, File desFile) throws Exception{
if (!desFile.getParentFile().exists()) {// 创建父目录
desFile.getParentFile().mkdirs();
}
byte [] data = new byte[1024];// 开辟一个拷贝的缓冲区
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(srcFile);
output = new FileOutputStream(desFile);
int len = 0;
// 1.读取数据到数组之中,随后返回读取个数
// 2.判断个数是否是-1,如果不是则进行写入
while((len = input.read(data)) != -1) {
output.write(data, 0, len);
}
return true;
} catch (Exception e) {
throw e;
} finally {
if (input != null) {
input.close();
}
if (output != null) {
output.close();
}
}
}
public boolean copy() throws Exception {// 文件拷贝处理
if (!this.srcFile.exists()) {// 源文件必须存在
System.out.println("拷贝的源文件不存在");
return false;// 拷贝失败
}
return this.copyFileImpl(this.srcFile, this.desFile);
}
}