相关文章推荐
多情的仙人球  ·  Java ...·  1 年前    · 
痴情的电池  ·  how to pass ...·  1 年前    · 

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

因为之前已经做过类似的功能了,所以就把判断文件目录以及创建的代码直接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()就行了。

项目中需要在代码中读取或创建文件保存路径,用到了mkdir,查看还有个mkdirs方法,这记录一下两者的区别。 1、关于两者的说明如下: boolean mkdir() : 创建此抽象路径名指定的目录。 boolean mkdirs() : 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。 2、结合自己的理解及具体实践如下:   mkdir():只能创建一层目录, 如: File file = new File("e:/test"); file.mkdir(); 这样会在e:/路径下创建t
public boolean mkdir() { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkWrit
一个跑了几年的java程序,最近突然不能运行了。只要一调用就报java.io.FileNotFoundException、java.lang.NullPointerException异常  仔细查看源代码,发现在新建输出流前,就调用了创建目录的代码mkdirs().  左思右想不得其果,这套程序在本地运行都是正常的。。。  感觉应该是环境的原因,生产环境是linux的,初步分析是不是磁盘满了
java中File.mkdirs方法线程安全问题的一点探讨<br />文章分类:Java编程<br />mkdirs是java中用来一次创建多级目录方法,在java.io.File类中。<br />我在编程中遇到这样一段代码:<br />     if (!dest.exists()) {<br />         dest.mkdirs();<br />     }<br />     if (!dest.isDirectory()) {<br />       throw new IOE
【功能说明】 mkdir命令是“make directories”中每个单词的粗体字母组合而成,其功能是创建目录,默认情况下,如果要创建的目录已经存在,则会提示此文件已经存在;而不会继续创建目录 【语法格式】 linux-77@ubuntu:~$ mkdir 123 mkdir: cannot create directory ‘123’: No space left on device 2.查询资料是因为$代表普通用户模式,权限不够, 可以进入root帐号在建立文件夹 进入root帐号 ,打 su -(su - 切换到root用户,并转到root用... $dir = 'Uploads/head_img/'.date('Y-m-d').'/'; if ( !is_dir($dir) ){ mkdir($dir, 0777, true); // 创建目录并赋权,true表示可以创建多级目录 ubuntu中mkdir失败,显示不存在此目录(mkdir: cannot create directory : No such file or directory) 1)mkdir: cannot create directory : No such file or directory(shell中有时候使用mkdir命令创建文件夹会失败,此时需要加上绝对路径) 2)mkdir: 无法创建目录"": 没有那个文件或目录(参考这个解决了问题~~~~) 3)在 Linux 下用 mk
Java中的File类提供了用于创建文件夹的方法mkdirs和mkdir。其中,mkdir方法创建单个文件夹,而mkdirs方法则可以创建多层文件夹。 mkdir方法的语法如下: public boolean mkdir() 该方法创建一个单级目录,如果成功,则返回true;如果目录已经存在,则返回false。 mkdirs方法的语法如下: public boolean mkdirs() 该方法创建多级目录,如果成功,则返回true;如果目录已经存在,则返回false。 需要注意的是,这两个方法创建的目录都是在指定路径下创建,如果路径不存在,则会抛出异常。 jsp解决导入项目后出现:Multiple annotations found at this line: - String cannot be resolved to a type - No 46065 项目打包出现:Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.2.RELEASE:repack 20888 项目打包出现:Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.2.RELEASE:repack 未必甘甜: 感谢大佬,弄三四个小时终于解决了 mysql找不到my.ini文件 天上云A: 大神,你救了我呜呜呜