方法一:复制目录下的所有文件,不包括目录本身

先定义一个方法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);
		}
	}
}