本实例主要功能是实现文件夹的复制。文件夹的复制方法和文件基本类似。实现步骤如下。
(1)创建FolderCopy类,在main()主方法中建立源文件夹和目标文件夹两个对象,调用源文件夹的listFiles()方法获取文件数组(即文件列表),通过这个文件数组和目标文件夹调用copy()方法完成文件夹的复制。
(2)在该类中创建copy()方法,该方法接收文件数组和目标文件夹两个参数,如果目标文件夹不存在,则调用mkdir()方法创建文件夹;然后在循环中判断文件数组中的每个文件对象,如果文件对象是文件类型则复制该文件到目标文件夹中,如果该文件对象是文件夹类型,则调用该方法的listFiles()方法获取该文件夹的文件数组(即文件夹的文件列表),创建新的目标文件夹对象;再通过文件数组和目标文件夹嵌套调用该方法,这样就能把文件夹所有的东西复制到另外一个文件夹下。关键代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FolderCopy {
public static void main(String[] args) {
File sourFile = null, desFile = null;
String sourFolder = "c:/test";
String desFolder = "c:/copyTest";
sourFile = new File(sourFolder);
if (!sourFile.isDirectory() || !sourFile.exists()) {
System.out.println("原文件夹不存在");
}
desFile = new File(desFolder);
desFile.mkdir();
copy(sourFile.listFiles(), desFile);
}
private static void copy(File[] s, File d) {
if (!d.exists())
d.mkdir();
for (int i = 0; i < s.length; i++) {
if (s[i].isFile()) {
try {
FileInputStream fis = new FileInputStream(s[i]);
FileOutputStream out = new FileOutputStream(new File(d
.getPath()
+ File.separator + s[i].getName()));
int count = fis.available();
byte[] data = new byte[count];
if ((fis.read(data)) != -1) {
out.write(data);
}
out.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (s[i].isDirectory()) {
File des = new File(d.getPath() + File.separator
+ s[i].getName());
des.mkdir();
copy(s[i].listFiles(), des);
}
}
}
}