`
miaoge
  • 浏览: 107657 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

File类创建文件夹时,出现死循环、无限嵌套创建子文件夹,且创建的文件夹无法删除

F# 
阅读更多

我在用File类创建文件夹时,出现死循环、无限嵌套创建子文件夹,且创建的文件夹无法删除。

 关键代码如下:

public void copy(File f) throws IOException {
  String  s2, s3, s4;
  File file = new File(f1);
  File file2 = new File(f2);
  if (file.isDirectory()) {
   s2 = file.getName();          //得到当前文件名
   s3 = file2.getAbsolutePath();  //获取要创建文件的绝对路径名
   s4 = s3 + "/" + s2;         
   File ff = new File(s4);
   ff.mkdirs();            //创建文件夹
   f1 = ff.getAbsolutePath();   //将创建的文件夹的绝对路径赋给 f1,f2
   f2 = ff.getAbsolutePath();
   copy(ff);     //递归
  }
 }

 

结果是创建的文件夹里又有文件夹一直无限循环创建下去,强制结束程序,删除刚创建的文件夹却弹出‘文件路径名太长无法删除文件夹’。

 

 

解决办法:

   出现死循环是因为递归没有结束条件,加个结束条件就可以了;下面是删除因为“文件路径名太长而无法删除”的文件夹的代码:

import java.io.File;

/**
 * 无限删除文件夹,解救无限创建的子文件夹删除不了的问题
 * @author 小苗
 *
 */
public class ForeverDelete {
	//删除文件夹方法
	private void deleteDir(File file) {
		if (file.listFiles().length == 0)
			file.getAbsoluteFile().delete();
	}
	//删除文件方法
	public void deleteFile(File file) {
		File[] temp = file.listFiles();
		for (int i = 0; i < temp.length; i++) {
			System.out.println(temp[i].getName());
			if (temp[i].isDirectory()) {
				if (temp[i].listFiles().length != 0)
					this.deleteFile(temp[i]); //如果 文件夹里不为空 递归调用 方法
				    this.deleteDir(temp[i]);
			} else {
				temp[i].delete();
			}
		}
	}
	public static void main(String[] args) {
		ForeverDelete m = new ForeverDelete();
		m.deleteFile(new File("D:\\system32"));
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics