实现把一个目录中的所有内容复制到一个目录中去
实现文件复制
因为一个目录下的文件可能是字符文件,也可能是二进制文件,所以使用字节流来进行复制,这样能复制所有类型的文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public static void copyFile(String srcFile, String destFile) throws IOException { FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); byte[] buffer = new byte[2097152]; int size = 0; while ((size = in.read(buffer)) != -1) { out.write(buffer, 0, size); } in.close(); out.close(); }
|
上述方法可以复制一个文件,我们可以在这个方法的基础之上实现目录的复制。
复制目录的算法
- 遍历该目录列表,如果列表项是文件就调用上面的copyFile()方法复制该文件
- 如果是该列表项是一个目录的话,就递归调用自己,复制该子目录。
复制目录的实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
public static void copyDir(String FromDir, String ToDir) throws IOException { File srcDir = new File(FromDir); if (!srcDir.isDirectory()) { return; } File destDir = new File(ToDir); if (!destDir.exists()) { destDir.mkdir(); } File[] srcDirList = srcDir.listFiles(); for (int i = 0; i < srcDirList.length; i++) { if (srcDirList[i].isDirectory()) { copyDir(FromDir + File.separator + srcDirList[i].getName(), ToDir + File.separator + srcDirList[i].getName()); } if (srcDirList[i].isFile()) { copyFile(FromDir + File.separator + srcDirList[i].getName(), ToDir + File.separator + srcDirList[i].getName()); }
} }
|
main方法中调用:
1 2 3 4
| public static void main(String[] args) throws IOException { copyDir("FromDir", "ToDir"); }
|
当前eclipse中的目录结构如下:
运行后的目录结构:
可以看到整个目录复制成功了。
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| package copy.file;
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;
public class CopyDir { public static void main(String[] args) throws IOException { copyDir("FromDir", "ToDir"); }
public static void copyDir(String FromDir, String ToDir) throws IOException { File srcDir = new File(FromDir); if (!srcDir.isDirectory()) { return; } File destDir = new File(ToDir); if (!destDir.exists()) { destDir.mkdir(); }
File[] srcDirList = srcDir.listFiles(); for (int i = 0; i < srcDirList.length; i++) { if (srcDirList[i].isDirectory()) { copyDir(FromDir + File.separator + srcDirList[i].getName(), ToDir + File.separator + srcDirList[i].getName()); } if (srcDirList[i].isFile()) { copyFile(FromDir + File.separator + srcDirList[i].getName(), ToDir + File.separator + srcDirList[i].getName()); }
} }
public static void copyFile(String srcFile, String destFile) throws IOException { FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); byte[] buffer = new byte[2097152]; int size = 0; while ((size = in.read(buffer)) != -1) { out.write(buffer, 0, size); } in.close(); out.close(); }
}
|