我有一个使用java File mkdir创建多个目录(100个或更多)的场景,我不确定这个,如果出现任何问题,我们有没有 回滚(删除)所有新创建的目录的逻辑吗?
for(User user: users){
File file = new File("Directory");
if(!file.exist()){
file.mkdir();
// if anything goes wrong
rollback();
}
}
我已经在google上搜索过,但确实找到了合适的答案。
答案 0 :(得分:2)
这没有内置于java中。我建议你保留一个跟踪你的变化的数据结构,如果你需要回滚,你只需要迭代它。
Psuedo代码:
boolean rollback = false;
List<File> changes = new ArrayList<File>();
for(int i = 0; i < users.length() && !rollback; i++) {
User user = users.get(i);
File file = new File("Directory");
if(!file.exist()){
try {
file.mkdir();
changes.add(file);
} catch (Throwable t) {
rollback = true;
}
}
if (rollback) {
// report failure?
try {
for(File file : changes) {
file.rmdir();
}
} catch (Throwable t) {
//So something smart here.
}
}
答案 1 :(得分:2)
没有用于回滚mkdir操作的api,所以只需保留已成功创建的目录列表,如果出现问题则删除它们