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

兼容windows和linux。

分析:

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

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

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

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

斜杠“\”为转义字符(参考:http://www.cnblogs.com/EasonJim/p/6561576.html)。

而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对象在输入和输出上都是原样输出。

具体操作:

参考:http://zyjustin9.iteye.com/blog/2164934

代码如下:

  /**
     * 判断多级路径是否存在,不存在就创建
     *
     * @param filePath 支持带文件名的Path:如:D:\news\2014\12\abc.text,和不带文件名的Path:如:D:\news\2014\12
     */
    public static void isExistDir(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 = new File(dir);
                if (!dirFile.exists()) {
                    dirFile.mkdir();
                    System.out.println("成功创建目录:" + dirFile.getCanonicalFile());
                }
            } catch (Exception e) {
                System.err.println("文件夹创建发生异常");
                e.printStackTrace();
            }
        }
    }    

测试工程:https://github.com/easonjim/5_java_example/tree/master/dirtest

时间: 2024-10-29 19:06:57

Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)的相关文章

java打开文件夹(含判断操作系统工具类和解压缩工具类)

1.Runtime.getRuntime().exec("explorer D:\\Java"); 2.java.awt.Desktop.getDesktop().open(new File("D:\\Java")); 4.java.awt.Desktop.getDesktop().browse(...) 3. try { String[] cmd = new String[5]; cmd[0] = "cmd"; cmd[1] = "/

C#文件夹操作之Directory类和DirectoryInfo类

问题的由来 怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起第一个HelloWorld,然后在 HelloWorld 里面写相关逻辑代码,添加我们的层.精灵等 ~ 我们并不一定需要知道 Cocos2d-x 是如何运行或者在各种平台之上运行,也不用知道 Cocos2d-x 的游戏是如何运行起来的,它又是如何渲染界面的 ~~~ 两个入口 程序入口的概念是相对的,AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同

iOS开发——Swift篇&amp;文件,文件夹操作

文件,文件夹操作 ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 //假设用户文档下有如下文件和文件夹[test1.txt,fold1/test2.txt] 2 let manager = NSFileManager.defaultManager() 3 let urlForDocument = manager.URLsForDirectory

文件及文件夹操作

文件及文件夹操作: C/S:WinForm可以操作客户端文件 Client ServerB/S:Brower Server 命名空间:using system .IO; 1. File类: 创建:File.Create(路径);创建文件,返回FileStream FileStream fs = File.Create(路径):之后需要关闭否则打不开,fs.close(); 删除:File.Delete(路径);无返回值 复制文件:File.Copy(源文件,目标文件); 剪切文件:File.Mo

C#文件夹操作

一.文件夹操作 Directory类,DirectoryInfo类.使用using System.IO命名空间 (一)创建文件夹 方法一: 1 private string path = @"F:\Text\ceshi"; 2 private void Create_Click(object sender, EventArgs e) 3 { 4 Directory.CreateDirectory(path); 5 } 方法二: 1 private string path = @&quo

常用的字符串文件文件夹操作

自己整理的一个类,需要的添加到工程中直接用就可以了. 1 /* ******* StrDirFile.h ********** 2 ********* 文件操作函数声明 ********** */ 3 4 /* author: autumoon */ 5 6 #ifndef _STR_DIR_FILE_ 7 #define _STR_DIR_FILE_ 8 9 #pragma comment(linker,"/manifestdependency:\"type='win32' name

【AFL(三)】afl-tmin修改:添加文件夹操作指令

前言: 之前分析tmin工具的时候,提到tmin的命令目前只能对文件进行操作,很多博客也提供了写脚本的方式对文件夹进行操作.本文是想通过修改tmin源代码的方式,实现添加新命令参数就可以对文件夹进行操作. 本文分为三部分:主要思路.部分实现细节.演示. 在文章最后给出了git地址,可以pull下来直接替换afl-tmin.c用. 主要思路: [一]分析源码 在main函数入口之前,有几个自变量.函数需要仔细查看: 1. 自变量 static u8 *in_file, /* Minimizer i

linux 下文件及文件夹操作常用命令

文件及文件夹操作 1.创建文件夹 " mkdir 文件夹名 " 这样就会在当前目录创建一个文件夹. 2.复制文件 cp 3.剪切 mv 编辑文件内容 vi 或vim 一般来说vi是基本功能,vim比vi功能强大一些. 一些基本的操作是 打开或新新文件   vi 文件路径 打开时是只读模式,要写编辑先输入一个i 这时就是插入模式 就可以录入你想录的信息了. 当录完后,可以保存退出,方法是 先按"ESC"退出插入模式,然后 输入 :wq  然后回车,就保存退出了. 也可

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:卸载windows\system32目录中的cd.dll,即把上面复制的文件删除: del %windir%\system32\cd.dll 例3:删除download文件夹中的文件,例子如下: del C:\DOWNLOAD\*.* 注意,以处的del命令只