昨晚深夜在做项目的文件上传,在上传之前要先判断指定的文件目录是否存在,如果不存在就先创建改目录。
因为之前已经做过类似的功能了,所以就把判断文件目录以及创建的代码直接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