java.io.File文件操作容易失误的两点--mkdirs()、删除目录

在最近的使用到的java.io.File中,忽然产生一个新奇的bug:

     程序正确执行后,为了优化存储文件的位置,将类似./json/的目录改成./data/json/后,程序执行异常,排查原因后发现是./data/json/路径没有被创建导致在这个路径下创建文件file.createNewFile()失败,但是明显在代码里有控制在不存在路径的情况下会创建目录。

        File jsonDir = new File(jsonPath);//./json/的目录改成./data/json/
        if (!jsonDir.exists()) {
            jsonDir.mkdir();  //原因是mkdir是创建单程目录,如果是多层目录需要存在父目录才能创建最后一层
        }
        //在这个路径下创建文件
        File file = new File(jsonPath + "zml.json");
        file.createNewFile();

自此,Java语言关于文件操作的这个容易漏而又重要的点--s的重要, 才被我知道:

mkdirs()是创建目录(含多层,但无论父目录是否存在)

mkdir()是创建单层目录或者父目录存在的多级目录的最后一层目录


在java.io.File里还有一个容易忽略的点:

对目录删除不能是一条语句搞定的,而是应该获取这个目录下的文件listFiles()后遍历删除再删除目录dir.delete()。

        File dir = new File(jsonPath);
        //删除所有 先删除目录下的内容,才能删除目录
        if (dir.exists() && dir.isDirectory()) {
            File[] fileArray = dir.listFiles();//获取目录下的所有文件
            for (File file : fileArray) {
               file.delete();
            }
            dir.delete();
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值