Java如何创建新目录
学习使用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()
- createDirectories()方法会先创建所有不存在的父目录,然后再创建新目录。
- 如果具有相同名称和路径的目录已经存在,它不会抛出异常。
- 在这种情况下,该方法不会执行任何操作。如果在指定路径中已经存在相同名称的文件,则会抛出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教程中,我们学习了如何创建新的单个目录以及具有所有父目录的嵌套目录。与旧的IO File类相比,建议使用NIO Files。