docs: public static void moveSubRootContents(File fromSubRoot, File toSubRoot) throws IOException {
          assert(fromSubRoot.exists() && fromSubRoot.isDirectory());
          assert(toSubRoot.exists() && toSubRoot.isDirectory());
  
          for (File file : fromSubRoot.listFiles()) {
              File fInOtherSubroot = new File(toSubRoot, file.getName());
  
              if (file.isDirectory()) {
                  if (!fInOtherSubroot.exists()) {
                      if (!fInOtherSubroot.mkdir()) {
                          throw new IOException("Can't create directory " + fInOtherSubroot);
                      }
                  }
                  moveSubRootContents(file, fInOtherSubroot);
              }
              else {
                  if (fInOtherSubroot.exists()) {
                      throw new IOException(fInOtherSubroot + " already exists");
                  }
                  if (!fInOtherSubroot.createNewFile()) {
                      throw new IOException();
                  }
  
                  FileInputStream fis = new FileInputStream(file);
                  FileOutputStream fos = new FileOutputStream(fInOtherSubroot);
                  FileChannel inputChannel = fis.getChannel();
                  FileChannel outputChannel = fos.getChannel();
                  BBContainer bufC = DBBPool.allocateDirect(8192);
                  ByteBuffer buf = bufC.b();
  
                  try {
                      while (inputChannel.read(buf) != -1) {
                          buf.flip();
                          outputChannel.write(buf);
                          buf.clear();
                      }
                  }
                  finally {
                      // These calls to close() also close the channels.
                      fis.close();
                      fos.close();
                      bufC.discard();
                  }
              }
          }
      }