栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java:File文件一直删除不了

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java:File文件一直删除不了

项目场景:

删除一个文件夹里的文件。


问题描述:

删除不了有三种情况:

  • 多线程操作
  • 打开的文件流没有关闭
  • 需要垃圾回收下

public boolean delete​():true当且仅当文件或目录被成功删除时; 否则为false(在删除文件夹时,文件夹里面有文件,删除不了。突然想到,补充 )

我们根据这几种情况分析:

  • 我的程序是单线程。
  • 用了 System.gc();还是删除不了。说明不是垃圾没有回收。
    • public static void gc​():运行垃圾回收器。 调用gc方法表明,Java虚拟机花费了回收未使用对象的努力,以使其当前占用的内存可用于快速重用。 当控件从方法调用返回时,Java虚拟机已经尽力从所有丢弃的对象中回收空间。
  • 还有一种就打开的文件流没有关闭,但是可以看出我的程序写了关闭。
 private static void booksDelete() throws IOException {
        System.out.println("请输入你要删除的图书的名字:");
        String s1 = sc.next();
        Properties po = new Properties();
        StringBuilder sb = new StringBuilder();
        sb.append(s1).append(".txt");
        FileReader fr = new FileReader("C:\text\books\"+sb.toString());
        po.load(fr);
        String[] pa = path(f);
        boolean flag=true;
        for (String p:pa){
            if (p.equals(sb.toString())){
                File f2 = new File("C:\text\books\"+sb.toString());
//                System.gc();
                boolean b = f2.delete();
                System.out.println(b);
                flag=false;
            }
        }
        if (flag==true){
            System.out.println("文件中没有该图书!");
        }
 	fr.close();
    }

原因分析:

最后我就试着把close()的顺序改了一下就可以了。由此可以看出来,在删除文件之前,文件流要关闭。

 private static void booksDelete() throws IOException {
        System.out.println("请输入你要删除的图书的名字:");
        String s1 = sc.next();
        Properties po = new Properties();
        StringBuilder sb = new StringBuilder();
        sb.append(s1).append(".txt");
        FileReader fr = new FileReader("C:\text\books\"+sb.toString());
        po.load(fr);
        String[] pa = path(f);
        fr.close();
        boolean flag=true;
        for (String p:pa){
            if (p.equals(sb.toString())){
                File f2 = new File("C:\text\books\"+sb.toString());
//                System.gc();
                boolean b = f2.delete();
                System.out.println(b);
                flag=false;
            }
        }
        if (flag==true){
            System.out.println("文件中没有该图书!");
        }
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号