365. Java IO API - 移动文件或目录

张开发
2026/4/23 8:04:42 15 分钟阅读

分享文章

365. Java IO API - 移动文件或目录
文章目录365. Java IO API - 移动文件或目录✅ 1. 基本用法⚙️ 2. 常用选项CopyOption 3. 移动目录 示例使用 ATOMIC_MOVE 保证原子操作 4. 使用 Varargs 传递多个选项⚠️ 5. 错误处理⚙️ 6. 原子操作Atomic Operations 小结365. Java IO API - 移动文件或目录移动文件或目录是文件系统操作中的常见需求Java 提供了非常方便的方法来实现这一操作Files.move()。✅ 1. 基本用法Files.move(sourcePath,targetPath);这行代码会尝试将sourcePath移动到targetPath但如果目标路径已存在move()方法将抛出FileAlreadyExistsException。⚙️ 2. 常用选项CopyOption你可以传递多个选项来定制移动操作这些选项以可变参数varargs的形式传入Files.move(sourcePath,targetPath,REPLACE_EXISTING,ATOMIC_MOVE);枚举常量含义说明REPLACE_EXISTING如果目标已经存在则替换目标文件或目录。对于符号链接会替换链接本身。ATOMIC_MOVE确保以原子方式移动文件意味着文件在移动过程中不会出现部分完成的状态。 3. 移动目录空目录可以直接移动。非空目录的移动操作会依赖操作系统的支持。在 UNIX 系统中如果目录在同一分区内进行移动实际上是通过重命名来实现的甚至包含子文件的目录也能被移动。PathsourceDirPaths.get(/home/user/dir);PathtargetDirPaths.get(/home/user/dir_backup);Files.move(sourceDir,targetDir,REPLACE_EXISTING); 示例使用ATOMIC_MOVE保证原子操作importjava.nio.file.*;importstaticjava.nio.file.StandardCopyOption.*;publicclassFileMoveDemo{publicstaticvoidmain(String[]args){PathsourcePaths.get(example.txt);PathtargetPaths.get(backup/example.txt);try{Files.move(source,target,REPLACE_EXISTING,ATOMIC_MOVE);System.out.println(✅ 文件成功移动);}catch(IOExceptione){System.err.println(❌ 文件移动失败e.getMessage());}}}这里的ATOMIC_MOVE保证了文件在移动过程中不会被其他进程看到半成品。如果操作系统或文件系统不支持原子操作会抛出异常。 4. 使用 Varargs 传递多个选项你可以传入多个CopyOption枚举值来定制操作。例如Files.move(source,target,REPLACE_EXISTING,ATOMIC_MOVE);这会执行一个替换目标文件且确保原子性的移动操作。⚠️ 5. 错误处理如果目标路径已存在并且你没有使用REPLACE_EXISTINGmove()会抛出FileAlreadyExistsException。如果操作系统不支持原子操作尤其是ATOMIC_MOVE会抛出IOException。try{Files.move(sourcePath,targetPath,REPLACE_EXISTING);}catch(FileAlreadyExistsExceptione){System.err.println(❌ 目标文件已存在未能移动);}catch(IOExceptione){System.err.println(❌ 文件移动失败e.getMessage());}⚙️ 6. 原子操作Atomic Operations原子操作意味着整个操作要么完成要么完全失败。对于多进程环境中的文件操作原子操作非常关键。举个例子如果你在复制文件时发生了中断原子操作可以保证文件要么完全复制要么根本不进行任何复制操作避免部分完成的状态。 小结操作类别方法文件/目录移动Files.move(Path, Path, ...)移动选项REPLACE_EXISTING,ATOMIC_MOVE

更多文章