用Java复制目录和文件,代码如下:
ackage com.work.ioliu;
import java.io.*;
import java.util.Scanner;
public class Tests {
static void close(AutoCloseable... acs) {
for (AutoCloseable ac : acs) {
if (ac != null) {
try {
ac.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
static float copy(String srcPath, String dstPath) {
//单个文件拷贝
final int M = 1024 * 1024;
final int M16 = 16 * M;
final long FILE_SIZE = new File(srcPath).length();
int BUFFER_SIZE = (int) FILE_SIZE / 8;
BUFFER_SIZE = BUFFER_SIZE > M16 ? M16 : BUFFER_SIZE<=0?M:BUFFER_SIZE;
float total = 0;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new java.io.FileInputStream(srcPath));
bos = new BufferedOutputStream(new java.io.FileOutputStream(dstPath));
byte[] bytes = new byte[2 * M];
int read = -1;
long begin = System.currentTimeMillis();
while (-1 != (read = bis.read(bytes))) {
bos.write(bytes, 0, read);
total += read;
System.out.println(total / FILE_SIZE);
}
bos.flush();
System.out.println((System.currentTimeMillis() - begin) / 1000.0);
} catch (FileNotFoundException e) {
e.printStackTrace();//找不到路径
} catch (IOException e) {
e.printStackTrace();
} finally {
close(bos, bis);
}
return total / FILE_SIZE;
}
static void dirCopy(File srcDir, File dstDir) {
if (!srcDir.exists()) return;
File[] files = srcDir.listFiles();
// if (files==null){
// return;
// }
for (File file : files) {
String dst = (dstDir.getAbsolutePath().endsWith("\\") ? dstDir.getAbsolutePath() : (dstDir.getAbsolutePath() + "\\")) + file.getName();
File newFile = new File(dst);
if (file.isFile()) {
float copy = copy(file.getPath(), dst);
if (copy == 1) {
System.out.println("succeed");
} else {
System.out.println("failed");
}
}
if (file.isDirectory()) {
if(!newFile.exists()){
newFile.mkdirs();
}
dirCopy(file, newFile);
}
}
}
public static void main(String[] args) {
final String SRCPATH = "C:\\Users\\18915\\Desktop\\iff";
final String DSTPATH = "C:\\Users\\18915\\Desktop\\ff";
File file = new File(SRCPATH);
File file1 = new File(DSTPATH);
dirCopy(file, file1);
}
}