行业资讯 2025年08月6日
0 收藏 0 点赞 722 浏览 1524 个字
摘要 :

文章目录 1.概述 2. 使用NIO文件 2.1 Files.createDirectory() 2.2. Files.createDirectories() 3.使用IO文件 3.1 File.mkdir() 3.2 File.mkdirs() 4.结论 学习使……




  • 1.概述
  • 2. 使用NIO文件
    • 2.1 Files.createDirectory()
    • 2.2. Files.createDirectories()
  • 3.使用IO文件
    • 3.1 File.mkdir()
    • 3.2 File.mkdirs()
  • 4.结论

学习使用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。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9479.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号