修复《文件夹的复制--递归算法》博客中的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
- 修复《文件夹的复制--递归算法》博客中的BUG
- 文件夹的复制--递归算法
- 递归的方法复制文件夹
- QtCreator下复制文件夹的一个BUG
- 利用递归的方法复制文件夹
- yarn client中的一个BUG的修复
- 递归复制文件夹
- C#递归复制文件夹
- 递归复制文件夹
- 递归复制多级文件夹
- 递归复制文件夹
- 复制整个文件夹下的文件(无限递归复制子文件夹)
- C# 递归复制文件夹及文件夹目录下的文件
- 删除非空文件夹的递归算法
- C#递归方法复制文件夹
- c# 复制文件夹(递归)
- java递归遍历复制文件夹
- IO流递归复制文件夹以及文件夹中的内容---师承刘意老师
- 一个android app打开另外一个app,并传替数据(个人学习笔记)
- 查找算法
- ms sql server 去除某个字段的某个字符
- CSS标准文档流
- WattOS:一个稳又快的轻量级 Linux 发行版
- 修复《文件夹的复制--递归算法》博客中的BUG
- Linux基础之IO重定向及管道详解(涉及tr、tee命令)
- 【九度】由前序和中序构造二叉树并求后序遍历
- 转载:SSL/TLS协议运行机制的概述
- 什么样的DevOps技能是团队需要的?
- 更改windows hosts设置
- Linux 解压缩
- LeetCode 245. Shortest Word Distance III
- csdn如何转载别人的文章