Java IO 类的 isDirectory 和 isFile方法的缺憾

今天在学习IO流的时候,学习到了isDirectory() 和 isFile()方法。

先介绍下这两个方法。

// isDirectory() 这个用来测试该对象存在且是一个目录文件,简单说该对象存在且是一个文件夹,就返回true,否则返回false,
// isFile() 这个用来测试该对象存在且是一个文件,简单说该对象存在而且要是一个文件,比如1.txt,就返回true,否则返回false,

如果我声明了一个file,路径如下:

File file = new File("F:/io/io1/io2/test.txt");

调用isDirectory()肯定返回的false,因为无论o、io1、io2 这3个文件夹是否存在,test.txt肯定不是文件夹(除非你命名了一个文件夹,名字叫test.txt,而且o、io1、io2 这3个文件夹还要存在,才会返回true)。

调用isFile(),只有当o、io1、io2 这3个文件夹存在,且io2文件夹下有test.txt这个文件的时候,才会返回true,其他都是false。

那么问题来了,我要怎么判断 new File("?") 这个new出来的file是文件还是文件夹呢?

不论是文件还是文件夹,如果o、o1、o2其中有一个不存在,则都是false,所以用上述两个方法都没法判断。

 

当然,这个问题可能是个撒币的问题,因为我们在实际项目的过程中,声明File的时候,是可以知道声明的是文件还是文件夹的。

 

如果是文件,我们可以先用isFile()判断是否存在,如果不存在,我们可以用file.createNewFile()方法创建具体文件。但是这里要注意一个非常重要的问题:如果o、io1、io2 这3个文件夹有不存在的文件夹,系统会报异常:java.io.IOException: 系统找不到指定的路径。这个时候,我们需要获取到这个文件的目录,需要调用file.getParent()获取到目录。然后再调用

String parentPath = file.getParent();
new File(parentPath).mkdirs();

创建整个目录,然后再用file.createNewFile()方法就可以创建这个test.txt文件了。

如果是文件夹,那就更简单了,先调用isDirectory()方法,判断是否存在,如果不存在,直接file.mkdirs()就可以创建了。无论你的父文件夹是否存在,直接全路径创建(父文件夹存在就不会创建,父文件夹不存在,就会创建)。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值