Java中mkdir()和mkdirs()的区别及说明

 更新时间:2023年11月02日 10:03:14   作者:八戒,你又涨价了哎  
这篇文章主要介绍了Java中mkdir()和mkdirs()的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mkdir()和mkdirs()的区别

boolean mkdir() : 创建此抽象路径名指定的目录。

boolean mkdirs() : 创建此抽象路径名指定的目录,包括创建不存在的父目录。

mkdir:只能用来创建文件夹,且只能创建一级目录,如果上级不存在,就会创建失败。

mkdirs:只能用来创建文件夹,且能创建多级目录 ,如果上级不存在,就会自动创建。(创建文件夹多用此)

Java的mkdir()与mkdirs()引发的悲剧---java的mkdir()方法无法创建文件目录

昨晚深夜在做项目的文件上传,在上传之前要先判断指定的文件目录是否存在,如果不存在就先创建改目录。

因为之前已经做过类似的功能了,所以就把判断文件目录以及创建的代码直接copy过来了,然而很郁闷的是,一模一样的代码,这回却遇到一个特别奇葩的问题:

我要判断的文件目录

   ServletContext context = ServletActionContext.getServletContext();
   // 获得当前web应用所在目录下file文件夹的绝对路径
	String path = context.getRealPath("/CloudSpaceFile/CustomerFile/"
							+ customerName + "/" + typesName + "/");
	File f = new File(path);// 判断文件夹是否存在,如果不存在就创建
	if (!f.exists()) {
		 f.mkdir();
		System.out.println("editCustApplicaAction.add()文件夹不存在------------"+f);
		}
		boolean t = f.exists();
	    if (t == true) {
		System.out.println("真的//");
	    }else {
			System.out.println("假的的//");
		      }

我之前做的目录判断、创建等功能的代码

     ServletContext context = ServletActionContext.getServletContext();
		// 获得当前web应用所在目录下file文件夹的绝对路径
 
		String path = context
				.getRealPath("/CloudSpaceFile/ResourceFile/SystemApplication/"
						+ typesName + "/");
		//System.out.println("editCustApplicaAction.add()+++++++++++++++++++"+path);
		File f = new File(path);// 判断文件夹是否存在,如果不存在就创建
		if (!f.exists()) {
			f.mkdir();
		}

因为是凌晨了,宿舍断网了,所以不能查找想要的知识,只能自己琢磨出现这种问题的原因,结果搞了大半天也没弄清楚原因。

现在查找了资料才知道问题所在:

其中第二次的customerName以及typesName是用户的用户名以及他所选择的文件名,其中 customerName 这个文件目录之上的目录已经存在的,也就是说,我现在要判断“****/CloudSpaceFile/CustomerFile/” 这个目录下的 customerName 这个文件夹是否存在,以及customerName这个文件夹下面的typesName这个文件夹也是否存在(也就是说,这里有可能要创建多层目录)。

第一次的的“****/CloudSpaceFile/CustomerFile/”目录已经存在了,要判断的是“typesName”这个目录是否存在,也就是说这里只要创建一层目录

问题就出在这里!!!:

我用创建单层目录的mkdir()方法去创建多层目录!!!

知道问题所在以后就容易解决了:

只要把调用的方法mkdir()改为mkdirs()就行了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 实战项目锤炼之朴素风格个人博客系统的实现流程

    Java 实战项目锤炼之朴素风格个人博客系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java+vue+Springboot+ssm+mysql+maven+redis实现一个朴素风格的个人博客系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java基础教程之字符流文件读写

    Java基础教程之字符流文件读写

    这篇文章主要给大家介绍了关于Java基础教程之字符流文件读写的相关资料,,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • MyBatis-Plus TypeHander不生效的问题解决

    MyBatis-Plus TypeHander不生效的问题解决

    MyBatis-Plus中使用lambdaUpdate更新JSON字段时,TypeHandler未生效导致数据截断错误,需手动转换或显式指定typeHandler解决,下面就来介绍一下该问题的解决
    2025-08-08
  • 如何用Eureka + Feign搭建分布式微服务

    如何用Eureka + Feign搭建分布式微服务

    Eureka是Spring Cloud Netflix的一部分,是一个服务注册中心。其服务生态中主要有三个角色:Eureka注册中心、服务提供者、服务消费者。服务提供者注册到Eureka后,服务消费者就能够直接向Eureka查询当前有哪些服务可用,再从中选取一个消费.本文讲解如何搭建分布式微服务
    2021-06-06
  • 一篇文章带你深入了解Java基础(2)

    一篇文章带你深入了解Java基础(2)

    这篇文章主要给大家介绍了关于Java中方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Java中如何取出String字符串括号中的内容

    Java中如何取出String字符串括号中的内容

    这篇文章主要介绍了Java中如何取出String字符串括号中的内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java 9中的"菱形"语法详解

    Java 9中的"菱形"语法详解

    Java 9 再次增强了“菱形”语法,它甚至允许在创建匿名内部类时使用菱形语法,Java 可根据上下文来推断匿名内部类中泛型的类型,下面程序示范了在匿名内部类中使用菱形语法,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • 关于Java实体类Serializable序列化接口的作用和必要性解析

    关于Java实体类Serializable序列化接口的作用和必要性解析

    序列化是将对象状态转化为可保持或者传输的格式过程,与序列化相反的是反序列化,完成序列化和反序列化,可以存储或传输数据,一般情况下,在定义实体类时会使用Serializable,需要的朋友可以参考下
    2023-05-05
  • Java PriorityQueue优先级队列的使用方式

    Java PriorityQueue优先级队列的使用方式

    PriorityQueue是一个优先级队列,可以按照优先级处理对象,它继承了Queue接口,底层是一个堆,可以实现大根堆或小根堆,常用方法包括offer、poll、peek、size等,插入元素时需要注意元素不能为null并且必须能够进行比较,大根堆可以通过传入自定义的比较器实现
    2026-02-02
  • 详解Java中hashCode的作用

    详解Java中hashCode的作用

    这篇文章主要介绍了详解Java中hashCode的作用的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论