Java中如何重命名或移动文件或目录

后端 潘老师 6个月前 (10-19) 128 ℃ (0) 扫码查看

学会在Java中将文件或目录重命名为指定路径或移动到新目录。我们将学习如何使用标准IO、新IO、Guava和Commons IO中的类。

1.使用File.renameTo()

如方法名所示,renameTo() 重命名文件为新名称或将文件移动到新目录位置。

  • renameTo() 返回true或false,表示重命名是否成功。
  • 如果旧文件或新文件存在写访问问题,则会抛出SecurityException异常。
File originalFile = new File("c:/temp/demo.txt");
File renamedFile = new File("c:/temp/demoNew.txt");
File movedFile = new File("c:/temp/moved/demoNew.txt");
boolean isCopied = originalFile.renameTo(renamedFile);
boolean isMoved = renamedFile.renameTo(movedFile);
System.out.println(isCopied);    //true
System.out.println(isMoved);    //true

2.新IO中的Files.move()

Files.move() 类似于renameTo(),不同之处在于它使用Path实例而不是File实例。

  • move() 方法将文件移动或重命名为目标文件。如果支持,移动文件将复制最后修改时间到目标文件。
  • 如果给定的文件和目标文件相同,则此方法不会产生任何效果。
  • 如果目标文件已存在,则move() 将失败。在这种情况下,我们可以使用StandardCopyOption.REPLACE_EXISTING选项。
  • 要将整个重命名或移动操作作为单个原子操作执行,我们可以使用StandardCopyOption.ATOMIC_MOVE选项。如果无法将移动操作作为原子文件系统操作执行(例如在两个不同的文件系统中),则会抛出AtomicMoveNotSupportedException异常。
  • 如果文件是一个符号链接,那么移动的是符号链接本身,而不是链接的目标。
  • 重命名目录可能会失败,如果需要将文件移动到新位置,即目录正在移动到一个位置。如果只是在文件系统中的相同位置对目录进行简单的重命名,那么它将成功。
Path file = Path.of("c:/temp/demo.txt");
//在同一目录中重命名
Files.move(file, file.resolveSibling("demoNew.txt"));
//移动到新的目录
Path newDir = Path.of("c:/temp/moved/");
Files.move(file, newDir.resolve(file.getFileName()),
    StandardOption.ATOMIC_MOVE,
    StandardCopyOption.REPLACE_EXISTING);

3.Guava中的Files.move()

这个Files.move() 方法将文件从一个路径移动到另一个路径。这适用于重命名和移动两种操作。

我们要小心,目标路径必须是文件自身的目标路径;而不仅仅是文件的新名称或新父目录的路径。

File originalFile = new File("c:/temp/demo.txt");
File renamedFile = new File("c:/temp/demoNew.txt");
com.google.common.io.Files.move(originalFile, renamedFile);
com.google.common.io.Files.move(renamedFile, movedFile);

4.Commons IO中的FileUtils

FileUtils类提供了许多根据需求移动或重命名文件和目录的方法。

  • moveDirectory(File srcDir, File destDir) – 将目录移动到目标位置并删除源目录。
  • moveDirectoryToDirectory(File src, File destDir, boolean createDestDir) : 将一个目录移动到另一个目录,并提供一个选项来创建新目录或不创建。如果createDestDir为false且无法创建新目录,则将抛出IOException。 moveFile(File srcFile, File destFile, CopyOption… copyOptions) : 移动文件并保留文件属性,可以选择使用可选的复制选项。
  • moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) : 将文件移动到指定目录。
  • moveToDirectory(File src, File destDir, boolean createDestDir) : 将文件或目录移动到目标目录。
FileUtils.moveFile(originalFile, renamedFile);
File targetDirectory = new File("c:/temp/moved/");
FileUtils.moveFileToDirectory(originalFile, targetDirectory, true);

5.结论

在这个简短的教程中,我们学会了如何使用不同的复制选项来重命名文件或目录,或将其移动到新位置。

尽管标准IO和新IO类提供了各种功能,但Common IO中的FileUtils类为每种操作提供了非常具体的方法。这些具体的方法名称非常清晰地传达了意图。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/9915.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】