java - 即使此目标文件夹已经存在,如何重命名文件夹?
问题描述
即使目录中已经存在同名的目标文件夹,如何重命名文件夹。
我试过renameTo
class的方法File
,但它不起作用。
例如:
/根
/a /b
我想用文件夹b
的名称重命名文件夹a
,实际上文件夹a
将被替换,是的,这就是我想要的。
解决方案
该解决方案使用 java.nio.file.Files
类的move
静态方法。
import java.nio.file.*;
import java.io.IOException;
import java.nio.file.attribute.*;
import java.util.*;
import java.util.stream.*;
public class FilesMoveExample {
public static void main (String [] args)
throws IOException {
Path srcePath = Paths.get("C:\\java-nio2\\folder1");
Path targetPath = Paths.get("C:\\java-nio2\\folder2");
Files.move(srcePath, targetPath); // NOTE: Statement A
}
}
假设folder1
是源目录并包含多个子目录和文件。
场景 1:
按原样使用“语句 A”。源folder1
存在,目标folder2
不存在。在运行代码时,folder1
重命名为folder2
. 的folder1
文件树移至folder2
.
场景 2:
“语句 A”修改为:Files.move(srcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
源folder1
和目标folder2
(一个空目录)存在。在运行代码时,目标folder2
被替换为folder1
(并重命名为folder2
)。的folder1
文件树移至folder2
.
场景 3:
“语句 A”修改为:Files.move(srcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
源folder1
和目标folder2
(非空目录)存在。在运行代码时,抛出DirectoryNotEmptyException
.
在此场景 3 中,目标目录需要为空才能成功完成移动。因此,使用以下方法之一递归删除目标目录,然后执行移动。第一个使用 Java 7,下一个使用 Java 8:
private static void deleteUsingWalkFileTree(Path start)
throws IOException {
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException e)
throws IOException {
if (e == null) {
Files.delete(dir);
return FileVisitResult.CONTINUE;
} else {
throw e;
}
}
});
}
private static void deleteUsingWalk(Path start )
throws IOException {
List<Path> files = Files.walk(start)
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
for (Path p : files) {
Files.delete(p);
}
}
推荐阅读
- php - MongoDB 不使用索引 - 可能的排序规则问题?
- tree - 我应该使用 RefCell
> 或 Rc > 对于具有可以突变的父母的树? - python - TypeError: __init__() 得到了一个意外的关键字参数“n_iter”
- python-3.x - 如何在 Python 中进行多线程图片上传
- java - 从 firebase 实时数据库中读取数据
- java - 看起来“势在必行”的代码支持响应式代码是否很常见?
- android - 我可以在材质芯片上创建渐变背景颜色吗?
- php - 请帮助将输入类型文本从 PHP 代码更改为收音机
- bootstrap-4 - Bootstrap 4:手风琴不会折叠卡片
- c# - 如何将部分视图数据传递给父视图控制器