java多级目录文件是否存在_Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)...

兼容windows和linux。

分析:

在windows下路径有以下表示方式:

(标准)D:\test\1.txt

(不标准,参考linux)D:/test/1.txt

然后在java中,尤其使用File对象在操作windows的路径时,非常的不好操作,因为不知道要用多少个斜杠“\”来表示。

而java的File对象上无论是windows还是linux,输入的路径不管标不标准,输出的路径都是当前系统的标准路径;但是,很奇怪的是用普通print打印的路径上,尤其是windows标准路径,和上面展示的一模一样;但反过来用打印出来的路径用在new File("D:\test\1.txt")却会提示反义字符报错。

经过研究,如果像windows下,这个方法在构造上只能识别类似这样的路径:D:\\test\\1.txt,而这个路径只是打印出来看到的,如果再把这个套入File对象进行构造时,也会报转义字符错误;要解决这个问题也就是说,File对象最终会识别双斜杠的路径,但是是转义后的双斜杠路径才能识别,最终要写成:D:\\\\test\\\\1.txt这样才是正确的。

以上分析windows的路径上对于以后路径的操作比较有帮助,比如切割路径的字符串时,这个路径在存入的变量时,是包含转义字符的,也就是要以“\\\\”四个斜杠为主才对。

还有一点需要注意的,由于上面列举的两个路径,在不标准的路径下近些切割找基点时,可以先用File对象取构造,然后获取绝对路径传入,这样输出的就是标准的路径,变量上也包含的正确的转义字符。

那么类似这样的路径问题,在linux下就不会出现,比如linux表示方式只有以下这种形式:

/users/jim/test/1.txt

可以看出,linux采用的反斜杠“/”,在字符上不是转义字符,所以File对象在输入和输出上都是原样输出。

具体操作:

代码如下:

/*** 判断多级路径是否存在,不存在就创建

*

*@paramfilePath 支持带文件名的Path:如:D:\news\2014\12\abc.text,和不带文件名的Path:如:D:\news\2014\12*/

public static voidisExistDir(String filePath) {

String paths[]= {""};//切割路径

try{

String tempPath= new File(filePath).getCanonicalPath();//File对象转换为标准路径并进行切割,有两种windows和linux

paths = tempPath.split("\\\\");//windows

if(paths.length==1){paths = tempPath.split("/");}//linux

} catch(IOException e) {

System.out.println("切割路径错误");

e.printStackTrace();

}//判断是否有后缀

boolean hasType = false;if(paths.length>0){

String tempPath= paths[paths.length-1];if(tempPath.length()>0){if(tempPath.indexOf(".")>0){

hasType=true;

}

}

}//创建文件夹

String dir = paths[0];for (int i = 0; i < paths.length - (hasType?2:1); i++) {//注意此处循环的长度,有后缀的就是文件路径,没有则文件夹路径

try{

dir= dir + "/" + paths[i + 1];//采用linux下的标准写法进行拼接,由于windows可以识别这样的路径,所以这里采用警容的写法

File dirFile = newFile(dir);if (!dirFile.exists()) {

dirFile.mkdir();

System.out.println("成功创建目录:" +dirFile.getCanonicalFile());

}

}catch(Exception e) {

System.err.println("文件夹创建发生异常");

e.printStackTrace();

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值