代码如下
- public class hahaq {
- // 源文件夹
- static String url1 = "d:/hahaha";
- // 目标文件夹
- static String url2 = "f:/xixixiix";
-
- public static void main(String args[]) throws IOException {
- // 创建目标文件夹
- (new File(url2)).mkdirs();
- // 获取源文件夹当前下的文件或目录
- File[] file = (new File(url1)).listFiles();
- for (int i = 0; i < file.length; i++) {
- if (file[i].isFile()) {
- // 复制文件
- copyFile(file[i], new File(url2 + file[i].getName()));
- }
- if (file[i].isDirectory()) {
- // 复制目录
- String sourceDir = url1 + File.separator + file[i].getName();
- String targetDir = url2 + File.separator + file[i].getName();
- copyDirectiory(sourceDir, targetDir);
- }
- }
- }
-
- // 复制文件
- public static void copyFile(File sourceFile, File targetFile)
- throws IOException {
- // 新建文件输入流并对它进行缓冲
- FileInputStream input = new FileInputStream(sourceFile);
- BufferedInputStream inBuff = new BufferedInputStream(input);
-
- // 新建文件输出流并对它进行缓冲
- FileOutputStream output = new FileOutputStream(targetFile);
- BufferedOutputStream outBuff = new BufferedOutputStream(output);
-
- // 缓冲数组
- byte[] b = new byte[1024 * 5];
- int len;
- while ((len = inBuff.read(b)) != -1) {
- outBuff.write(b, 0, len);
- }
- // 刷新此缓冲的输出流
- outBuff.flush();
-
- // 关闭流
- inBuff.close();
- outBuff.close();
- output.close();
- input.close();
- }
-
- // 复制文件夹
- public static void copyDirectiory(String sourceDir, String targetDir)
- throws IOException {
- // 新建目标目录
- (new File(targetDir)).mkdirs();
- // 获取源文件夹当前下的文件或目录
- File[] file = (new File(sourceDir)).listFiles();
- for (int i = 0; i < file.length; i++) {
- if (file[i].isFile()) {
- // 源文件
- File sourceFile = file[i];
- // 目标文件
- File targetFile = new File(new File(targetDir)
- .getAbsolutePath()
- + File.separator + file[i].getName());
- copyFile(sourceFile, targetFile);
- }
- if (file[i].isDirectory()) {
- // 准备复制的源文件夹
- String dir1 = sourceDir + "/" + file[i].getName();
- // 准备复制的目标文件夹
- String dir2 = targetDir + "/" + file[i].getName();
- copyDirectiory(dir1, dir2);
- }
- }
- }
- }
复制代码
为什么我放一些MP3文件和txt文件一起直接放到d:/hahaha,复制后,出现了目标文件夹,但是里面的文件却被改名字输出到d盘的根目录下。
但是我把MP3文件和txt文件放到d:/hahaha/haha 后 复制后就能正确复制文件夹。
就是说要三层的文件夹以上才能正确输出。我一直纠结这个问题,有人能解答一下吗? |
|