1. 概述
在这个快速教程中,我们将了解在Java中重命名/移动文件。
我们将首先研究使用NIO的Files和Path类,然后是Java File类、Google Guava,最后是Apache Commons IO库。
2. 设置
在示例中,我们将使用以下设置,其中包含源文件名和目标文件名的2个常量以及一个能够多次运行测试的清理步骤:
private final String FILE_TO_MOVE = "src/test/resources/originalFileToMove.txt";
private final String TARGET_FILE = "src/test/resources/targetFileToMove.txt";
@BeforeEach
public void createFileToMove() throws IOException {
File fileToMove = new File(FILE_TO_MOVE);
fileToMove.createNewFile();
}
@AfterEach
public void cleanUpFiles() {
File targetFile = new File(TARGET_FILE);
targetFile.delete();
}
3. 使用NIO Paths和Files类
让我们从使用Java NIO包中的Files.move()方法开始:
@Test
public void givenUsingNio_whenMovingFile_thenCorrect() throws IOException {
Path fileToMovePath = Paths.get(FILE_TO_MOVE);
Path targetPath = Paths.get(TARGET_FILE);
Files.move(fileToMovePath, targetPath);
}
在JDK 7中,NIO包进行了重大更新,并添加了Path类。这提供了方便操作文件系统工件的方法。
请注意,文件和目标目录都应该存在。
4. 使用File类
现在让我们看看如何使用File.renameTo()方法来做同样的事情:
@Test
public void givenUsingFileClass_whenMovingFile_thenCorrect() throws IOException {
File fileToMove = new File(FILE_TO_MOVE);
boolean isMoved = fileToMove.renameTo(new File(TARGET_FILE));
if (!isMoved) {
throw new FileSystemException(TARGET_FILE);
}
}
在本例中,要移动的文件以及目标目录也需要存在。
请注意,renameTo()仅抛出两种类型的异常:
- SecurityException:如果安全管理器拒绝对源或目标的写访问
- NullPointerException:如果参数目标为空
如果文件系统中不存在目标,不会抛出异常-你将必须检查方法返回的成功标志。
5. 使用Guava
接下来让我们看一下Guava解决方案,它提供了一个方便的Files.move()方法:
@Test
public void givenUsingGuava_whenMovingFile_thenCorrect() throws IOException {
File fileToMove = new File(FILE_TO_MOVE);
File targetFile = new File(TARGET_FILE);
com.google.common.io.Files.move(fileToMove, targetFile);
}
同样,在此示例中,要移动的文件和目标目录需要存在。
6. Apache Commons IO
最后,让我们看一下使用Apache Commons IO的解决方案-可能是最简单的一个:
@Test
public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException {
FileUtils.moveFile(FileUtils.getFile(FILE_TO_MOVE), FileUtils.getFile(TARGET_FILE));
}
当然,这一行将允许移动或重命名,具体取决于目标目录是否相同。
或者,这里有一个专门用于移动的解决方案,也使我们能够自动创建目标目录(如果它尚不存在):
@Test
public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException {
FileUtils.moveFileToDirectory(
FileUtils.getFile("src/test/resources/fileToMove.txt"),
FileUtils.getFile("src/main/resources/"), true);
}
7. 总结
在本文中,我们研究了在Java中移动文件的不同解决方案。我们在这些代码片段中专注于重命名,但是移动当然是一样的,只是目标目录需要不同。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章