方法一:复制目录下的所有文件,不包括目录本身
先定义一个方法copyFile,里面传入两个String参数,一个是要复制文件的路径名称,一个是要复制文件到该文件夹下的路径,然后声明实例,然后就创建newFile目录mkdir(),然后声明一个字符串数组用来指定file目录中的文件和目录,在声明一个temp为空,判断指定目录下是否有相同文件名的文件,然后利用循环来读取指定复制文件下的目录子文件,递归目录,例子如下:
public class Demo2 {
public static void main(String[] args) throws IOException {
copyFile("D:/HBuilder.9.0.6.windows","F:/z");
}
public static void copyFile(String oldFile, String newFile) throws IOException {
File file = new File(oldFile);
File file2 = new File(newFile);
file2.mkdir();
String[] fileName = file.list();
File temp = null;
if(oldFile.equals(newFile)) {
System.out.println("已存在相同文件名");
}else {
for (int i = 0; i < fileName.length; i++) {
if (oldFile.endsWith(File.separator)) {// \
temp = new File(oldFile + fileName[i]);
} else {
temp = new File(oldFile + File.separator + fileName[i]);
}
if (temp.isFile()) {
FileInputStream in = new FileInputStream(temp);
FileOutputStream ou = new FileOutputStream(newFile + "/" + temp.getName());
byte[] bs = new byte[1024];
int count = 0;
while ((count = in.read(bs, 0, bs.length)) != -1) {
ou.write(bs, 0, count);
}
ou.flush();
ou.close();
in.close();
}
if (temp.isDirectory()) {
copyFile(oldFile + "/" + fileName[i], newFile + "/" + fileName[i]);
}
}
}
}
}
方法二:复制目录下所有的文件,不包括目录本身
这个是定义了两个方法copyDir()和copyFile(),方法意思同上,只不过拆分了两个,copyDir()循环递归,主要是copyDir()调用了copyFile()和自己,进行循环递归调用:
public static void copyDir(String sourcePath, String newPath) throws IOException {
File file = new File(sourcePath);
String[] filePath = file.list();
if (!(new File(newPath)).exists()) {
(new File(newPath)).mkdir();
}
for (int i = 0; i < filePath.length; i++) {
if ((new File(sourcePath + file.separator + filePath[i])).isDirectory()) {
copyDir(sourcePath + file.separator + filePath[i], newPath + file.separator + filePath[i]);
}
if (new File(sourcePath + file.separator + filePath[i]).isFile()) {
copyFile(sourcePath + file.separator + filePath[i], newPath + file.separator + filePath[i]);
}
}
}
public static void copyFile(String oldPath, String newPath) throws IOException {
File oldFile = new File(oldPath);
File file = new File(newPath);
FileInputStream in = new FileInputStream(oldFile);
FileOutputStream out = new FileOutputStream(file);;
byte[] buffer=new byte[2097152];
int readByte = 0;
while((readByte = in.read(buffer)) != -1){
out.write(buffer, 0, readByte);
}
in.close();
out.close();
}
方法三:复制制定目录的所有文件,包括目录本身
这个方法比较简单,相比较方法一和方法二,方法三复制了制定目录的所有文件,包括目录本身:
public static void main(String[] args) throws IOException {
File src = new File("F:\\z");
File dest = new File("D:\\");
copyFile(src, dest);
}
public static void copyFile(File src,File dest) throws IOException{
File newFile = new File(dest,src.getName());
if(!newFile.exists()){
newFile.mkdirs();
}
File[] files = src.listFiles();
for (File file : files) {
if(file.isFile()){
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(newFile,file.getName()));
byte[] b = new byte[1024];
int len;
while((len = fis.read(b)) !=-1){
fos.write(b, 0, len);
}
fos.close();
fis.close();
}else if(file.isDirectory()){
copyFile(file, newFile);
}
}
}