学习使用Java IO和NIO类在指定的路径中创建一个新目录。我们将了解在父目录不存在的情况下能够和不能创建父目录的方法。
1.概述
我们将在c:/temp/data/archive 的位置创建一个新目录。注意,data 是archive 的父目录。在运行时,当我们试图创建archive 目录时,有可能data 目录不存在。
我们将学习如何以这种方式创建archive 目录。
- 如果
data目录不存在,则创建它 - 如果
data目录不存在,则抛出一个异常。
2.使用NIO文件
Files 类有两个方法。
2.1.Files.createDirectory()
createDirectory(),如果所有的父目录都存在,则创建新的目录。- 检查文件是否存在以及在不存在的情况下创建目录是一个单一的原子操作。
- 如果在指定的路径中已经存在一个类似名称的文件或目录,那么
FileAlreadyExistsException异常。 - 如果任何父目录不存在,则抛出
IOException。
Path path = Paths.get("c:/temp/data/archive");
if (!Files.exists(path)) {
Files.createDirectory(path);
}
2.2.Files.createDirectories()
createDirectory()通过首先创建所有不存在的父目录来创建新目录。- 如果一个具有相同名称和路径的目录已经存在,它不会抛出一个异常。在这种情况下,什么都不会发生。
- 如果一个同名的文件已经存在于指定的路径中,那么
FileAlreadyExistsException异常被抛出。 - 这不是一个原子性的操作。因此,这个操作完全有可能创建一些父目录,然后因为某些原因而无法完成。
Path path = Paths.get("c:/temp/data/archive");
Files.createDirectories(path);
3.使用IO文件
File 类也有两个类似的方法。
3.1.File.mkdir()
mkdir() 方法在指定的路径中创建一个新的目录。该方法仅在目录被创建时返回true ;否则返回false 。
如果出现写入权限问题,它可能会抛出SecurityException 。
File newDir = new File("c:/temp/data/archive");
if(!newDir.exists()) {
boolean isDirectoryCreated = newDir.mkdir();
}
作为一个最佳实践,我们应该在这个操作之后总是验证目录是否以指定的名称存在。要做到这一点,我们可以在此操作后再次使用newDir.exists() 。
3.2.File.mkdirs()
mkdirs() 方法创建指定名称的目录,包括任何必要但不存在的父目录。
- 与*createDirectories()*类似,该操作在创建一些父目录后可能会失败。
- 当且仅当该目录与所有必要的父目录一起被创建时,它返回
true;否则返回false。
File newDir = new File("c:/temp/data/archive");
boolean isDirectoryCreated = newDir.mkdirs();
4.结论
在这个Java教程中,我们学习了如何创建一个新的单一目录以及一个嵌套目录及其所有父目录。
与旧的IOFile 类相比,我们推荐使用NIOFiles 。
学习愉快