当path不以driveletter开头时,java.io.File mkdirs()方法在Windows上抛出NullPointerException

时间:2017-09-25 18:17:05

标签: java windows filesystems java-io

当使用File类mkdirs()在路径中创建两个子目录时,在启动时没有驱动器号,抛出NullPointerException。就像我创建一个子目录一样,这完全没有错误。

当路径以驱动器号开头时,子目录被创建到任何级别。

在这种情况下,如何为windows和unix文件系统编写唯一代码?

以下是示例:

C:/ apps目录已存在。

//scenario 1    
String ITERATION_DIR = "/apps"+"/"+"iter05";
            File iterationDir = new File(ITERATION_DIR);
            if(!iterationDir.exists()){
                iterationDir.mkdirs();  //creates iter05 directory
            }
    //scenario 2
           ITERATION_DIR = "/apps"+"/"+"iter05"+"/"+"ENG";
            iterationDir = new File(ITERATION_DIR);
            if(!iterationDir.exists()){
                iterationDir.mkdirs(); //creates ENG directory
            }

//scenario 3
            ITERATION_DIR = "/apps"+"/"+"iter05"+"/"+"ENG/dir1/dir2/dir3";
            iterationDir = new File(ITERATION_DIR);
            if(!iterationDir.exists()){
                iterationDir.mkdirs();  //throws exception.
            }

//scenario 4
            ITERATION_DIR = "C:/apps"+"/"+"iter05"+"/"+"ENG/dir1/dir2/dir3";
            iterationDir = new File(ITERATION_DIR);
            if(!iterationDir.exists()){
                iterationDir.mkdirs();  //creates dir1/dir2/dir3 when path is prefixed with drive letter
            }

方案3的例外细节:

Exception in thread "main" java.lang.NullPointerException
    at java.io.WinNTFileSystem.normalize(WinNTFileSystem.java:82)
    at java.io.WinNTFileSystem.getUserPath(WinNTFileSystem.java:346)
    at java.io.WinNTFileSystem.resolve(WinNTFileSystem.java:311)
    at java.io.File.getCanonicalPath(File.java:618)
    at java.io.File.getCanonicalFile(File.java:643)
    at java.io.File.mkdirs(File.java:1348)

0 个答案:

没有答案