我们可以在java中回滚文件mkdir吗?

时间:2015-03-25 18:01:50

标签: java

我有一个使用java File mkdir创建多个目录(100个或更多)的场景,我不确定这个,如果出现任何问题,我们有没有 回滚(删除)所有新创建的目录的逻辑吗?

for(User user: users){
  File file = new File("Directory");
  if(!file.exist()){
   file.mkdir();
   // if anything goes wrong
   rollback();
  }
}

我已经在google上搜索过,但确实找到了合适的答案。

2 个答案:

答案 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,所以只需保留已成功创建的目录列表,如果出现问题则删除它们