当使用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)