西西卡尔carl 2018-05-21 15:58 采纳率: 50%
浏览 5358

Java中,为什么当File为目录时,file.isDirectory()会返回false

我建了一个删除文件的功能,以下是我写的代码;在路径指定的路径目录里面有文件还有目录,请问为什么输出的时候都是:“删除文件”

 import java.io.File;

public class Recursion2
{
    public File method(File f)
    {
        /*
         * 判断是否为文件目录
         */
        if (f.exists() == false)
        {
            System.out.println("路径文件不存在");
            return null;
        }

        /*
         * 删除文件目录
         */
        if (delete(f) == true)
        {
            return null;
        }
        else
        {
            File[] files = f.listFiles();
            for (File file : files)
            {
                method(file);
            }
            return method(f);
        }
    }

    private boolean delete(File file)
    {
        boolean jubge = file.delete();
        if (jubge)
        {
            if (file.isDirectory())
            {
                System.out.println("删除目录 " + file);
            }
            else
            {
                System.out.println("删除文件 " + file);
            }
        }
        return jubge;
    }

    public static void main(String[] args)
    {
        Recursion2 recursion = new Recursion2();
        File f = new File("D:/Desktop/火狐");
        recursion.method(f);
        System.exit(0);
    }
}

以下是文件路径:
图片说明

以下是部分输出结果:
删除文件 D:\Desktop\火狐\Mozilla Firefox\omni.ja
删除文件 D:\Desktop\火狐\Mozilla Firefox\pingsender.exe
删除文件 D:\Desktop\火狐\Mozilla Firefox\platform.ini
删除文件 D:\Desktop\火狐\Mozilla Firefox\plugin-container.exe
删除文件 D:\Desktop\火狐\Mozilla Firefox\plugin-container.exe.sig
删除文件 D:\Desktop\火狐\Mozilla Firefox\plugin-hang-ui.exe
删除文件 D:\Desktop\火狐\Mozilla Firefox\precomplete
删除文件 D:\Desktop\火狐\Mozilla Firefox\qipcap64.dll
删除文件 D:\Desktop\火狐\Mozilla Firefox\removed-files
删除文件 D:\Desktop\火狐\Mozilla Firefox\softokn3.chk
删除文件 D:\Desktop\火狐\Mozilla Firefox\softokn3.dll
删除文件 D:\Desktop\火狐\Mozilla Firefox\ucrtbase.dll
删除文件 D:\Desktop\火狐\Mozilla Firefox\uninstall\helper.exe
删除文件 D:\Desktop\火狐\Mozilla Firefox\uninstall\shortcuts_log.ini
删除文件 D:\Desktop\火狐\Mozilla Firefox\uninstall\uninstall.log
删除文件 D:\Desktop\火狐\Mozilla Firefox\uninstall\uninstall.update
删除文件 D:\Desktop\火狐\Mozilla Firefox\uninstall
删除文件 D:\Desktop\火狐\Mozilla Firefox\update-settings.ini
删除文件 D:\Desktop\火狐\Mozilla Firefox\updater.exe
删除文件 D:\Desktop\火狐\Mozilla Firefox\updater.ini
删除文件 D:\Desktop\火狐\Mozilla Firefox\vcruntime140.dll
删除文件 D:\Desktop\火狐\Mozilla Firefox\xul.dll
删除文件 D:\Desktop\火狐\Mozilla Firefox\xul.dll.sig
删除文件 D:\Desktop\火狐\Mozilla Firefox
删除文件 D:\Desktop\火狐

依据@caozhy的回答我把method改写成以下,结果还是一样啊?

    public void method(File f)
    {
        /*
         * 判断是否为文件目录
         */
        if (f.exists() == false)
        {
            System.out.println("路径文件不存在");
            return;
        }

        /*
         * 删除文件目录
         */
        if (f.isFile() || f.list().length == 0)
        {
            delete(f);
        }
        else
        {
            File[] files = f.listFiles();

            for (File file : files)
            {
                method(file);
                delete(file);
            }
            delete(f);
        }
    }
  • 写回答

2条回答 默认 最新

  • know_wwwh 2018-05-22 10:00
    关注

    file.delete()这个方法只能删除空文件夹,如果文件里面有文件夹就会返回false直接退出delete方法了,当file是文件的时候file.delete()为true才会执行delete后面的代码if (jubge){},所以file.isDirectory()肯定为false。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算