在最近的使用到的java.io.File中,忽然产生一个新奇的bug:
程序正确执行后,为了优化存储文件的位置,将类似./json/的目录改成./data/json/后,程序执行异常,排查原因后发现是./data/json/路径没有被创建导致在这个路径下创建文件file.createNewFile()失败,但是明显在代码里有控制在不存在路径的情况下会创建目录。
File jsonDir = new File(jsonPath);//./json/的目录改成./data/json/
if (!jsonDir.exists()) {
jsonDir.mkdir(); //原因是mkdir是创建单程目录,如果是多层目录需要存在父目录才能创建最后一层
}
//在这个路径下创建文件
File file = new File(jsonPath + "zml.json");
file.createNewFile();
自此,Java语言关于文件操作的这个容易漏而又重要的点--s的重要, 才被我知道:
mkdirs()是创建目录(含多层,但无论父目录是否存在)
mkdir()是创建单层目录或者父目录存在的多级目录的最后一层目录
在java.io.File里还有一个容易忽略的点:
对目录删除不能是一条语句搞定的,而是应该获取这个目录下的文件listFiles()后遍历删除再删除目录dir.delete()。
File dir = new File(jsonPath);
//删除所有 先删除目录下的内容,才能删除目录
if (dir.exists() && dir.isDirectory()) {
File[] fileArray = dir.listFiles();//获取目录下的所有文件
for (File file : fileArray) {
file.delete();
}
dir.delete();
}