A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© miedongdong 高级黑马   /  2013-10-31 22:39  /  1313 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 miedongdong 于 2013-11-1 12:35 编辑

因为之前听了付东老师的IO课程,自己也动手练一下,没想到把自己也整惨了,文件夹太多删不掉,想试一下自己搞定,最后还是得
求救于老师的方法。我还没搞定那个“顽疾”,没想到一个小小的程序也搞不定了,请各位帮忙看一下为啥无法递归,总是显示栈溢出
  1. <p>import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;</p><p>public class DeleteDir {</p><p> /**需求:
  4.   * 将一个文件夹下的文件和文件夹删除
  5.   * @param args
  6.   * @throws Exception
  7.   */
  8. public static void main(String[] args) throws Exception {

  9.   File file= new File("D:/dd");
  10.   Delete(file);

  11. }
  12. public static void Delete(File dir)
  13. {
  14.   File[] files = dir.listFiles();  //列出文件夹下的文件和文件夹
  15.   for (File file : files) {
  16.    if(file.isDirectory())
  17.     Delete(dir);
  18.    else {
  19.     file.delete();
  20.     }
  21.   }
  22.   dir.delete();
  23.   
  24. }</p><p>}</p>
  25. <p> </p>
复制代码
Exception in thread "main" java.lang.StackOverflowError
at java.io.Win32FileSystem.resolve(Win32FileSystem.java:255)
at java.io.File.<init>(File.java:236)
at java.io.File.listFiles(File.java:1138)

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
你删除的文件中文件夹太多了 因为递归一次就要在栈中开辟内存  而且递归没结束也不会释放内存  这样如果递归次数多(也就是文件夹多) 这样就会发生内存溢出

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
qixing0918 发表于 2013-11-1 07:17
你删除的文件中文件夹太多了 因为递归一次就要在栈中开辟内存  而且递归没结束也不会释放内存  这样如果递 ...

我是用这个来测试一下的,这个文件夹下只有几个文件夹,可是也报错,所以就想问一下的,至于那个“顽疾”,我已经搞定了
回复 使用道具 举报
1.还是报栈溢出错误么  我感觉你写的对啊
回复 使用道具 举报
qixing0918 发表于 2013-11-1 11:40
1.还是报栈溢出错误么  我感觉你写的对啊

今天终于搞定了,原来是自己赋错值的问题
  1. <p>import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;</p><p>class a {</p><p> /**需求:
  4.   * 将一个文件夹下的文件和文件夹删除
  5.   * @param args
  6.   * @throws Exception
  7.   */
  8. public static void main(String[] args) throws Exception {</p><p>  File file= new File("D:/11");
  9.   Delete(file);

  10. }
  11. public static void Delete(File dir)
  12. {
  13.   File[] files = dir.listFiles();  //列出文件夹下的文件和文件夹
  14.   for (File file : files) {
  15.    if(file.isDirectory())
  16.     Delete(file);  //一开始我这里传了dir,可是为什么会栈溢出就不懂了,希望有人能帮忙解答一下,改成file就好了
  17.    else {
  18.     file.delete();
  19.     }
  20.   }
  21.   dir.delete();
  22.   
  23. }</p><p>}
  24. </p>
  25. <p> </p>
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马