修复《文件夹的复制--递归算法》博客中的BUG

来源:互联网 发布:js判断是不是function 编辑:程序博客网 时间:2024/06/07 14:18

前一段时间写了一个用递归算法来实现文件夹的复制(文件夹的复制--递归算法),今天在观看代码时,偶然间发现里面存在一个比较明显的BUG。为了不误导读者,现在专门写这篇文章来修复该BUG。

之前那篇文章没有考虑到在复制文件夹时会出现这种情况:将文件夹复制到自己的子文件夹中,这种情况会导致程序出现一个死循环,而且在磁盘中生成一个文件深度足够深的文件夹,导致删除时还无法删除。现在解决这两个问题:

①:不允许将文件拷贝到子文件夹中,解决方案只需加一行胆码即可:



完整的代码如下:

package com.tiantang.io;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class FileUtils {/** * 拷贝文件夹 * @param src * @param dest */public static void copyDir(File src, File dest) {if(dest.getAbsolutePath().contains(src.getAbsolutePath())){throw new RuntimeException("不能将文件拷贝到子文件下!");}if (src.isDirectory()) {File temp = new File(dest, src.getName());temp.mkdirs();for (File file : src.listFiles()) {copyDir(file, temp);}} else {copyFile(src, new File(dest, src.getName()));}}/** * 拷贝文件 *  * @param src * @param dest */public static void copyFile(File src, File dest) {InputStream in = null;OutputStream out = null;try {in = new FileInputStream(src);out = new FileOutputStream(dest);byte[] b = new byte[1024];int len = 0;while (-1 != (len = in.read(b))) {out.write(b, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {out.close();} catch (IOException e) {e.printStackTrace();}try {in.close();} catch (IOException e) {e.printStackTrace();}}}/** * 拷贝文件 *  * @param srcPath * @param destPath */public static void copyFile(String srcPath, String destPath) {copyFile(new File(srcPath), new File(destPath));}}

②:由于bug的存在导致生成的超长文件夹无法删除

可以采用360强力删除(个人觉得360的这个强力删除还是挺有用的,平时经常会碰到删除文件时弹出文件正在被使用而无法删除的警告,这个时候360强力删除就派上用场了)。可能有的人不喜欢用360,但个人觉得有时候360还是挺好用的,毕竟人家一个大公司做出来的产品不能说是毫无用处吧。

1 0
原创粉丝点击