public static FileSaver create(File directory, String name, long size) throws Throwable {
   String name2 = name;
   for (int ii = 1; ; ++ii, name2 = name + '-' + ii) {
     File resultFile = new File(directory, name2);
     if (resultFile.exists()) {
       continue;
     }
     File partialFile = new File(directory, String.format(PARTIAL_FORMAT, name2, size));
     if (partialFile.exists()) {
       continue;
     }
     boolean success = false;
     FileSaver fileSaver = new FileSaver(partialFile, resultFile, size);
     try {
       if (0 >= size) {
         fileSaver.file = new RandomAccessFile(resultFile, "rw");
         fileSaver.file.setLength(0);
         fileSaver.file.close();
         fileSaver.file = null;
       }
       success = true;
       return fileSaver;
     } finally {
       if (!success) {
         fileSaver.close();
       }
     }
   }
 }
 public static FileSaver continuePartialFile(File partialFile) throws Throwable {
   if ((!partialFile.isFile()) || (PARTIAL_EXTRA_DATA > partialFile.length())) {
     return null;
   }
   Matcher matcher = PARTIAL_PATTERN.matcher(partialFile.getName());
   if (!matcher.matches()) {
     return null;
   }
   File resultFile = new File(partialFile.getParentFile(), matcher.group(1));
   if (resultFile.exists()) {
     return null;
   }
   long size;
   try {
     size = Long.parseLong(matcher.group(2), 16);
   } catch (NumberFormatException ex) {
     return null;
   }
   if (0 >= size) {
     return null;
   }
   boolean success = false;
   FileSaver fileSaver = new FileSaver(partialFile, resultFile, size);
   try {
     fileSaver.file = new RandomAccessFile(partialFile, "rw");
     fileSaver.saved = fileSaver.file.length() - PARTIAL_EXTRA_DATA;
     fileSaver.file.seek(fileSaver.saved);
     fileSaver.lastClock = fileSaver.file.readBoolean();
     fileSaver.lastCrc = fileSaver.file.read() << 24;
     fileSaver.lastCrc |= fileSaver.file.read() << 16;
     fileSaver.lastCrc |= fileSaver.file.read() << 8;
     fileSaver.lastCrc |= fileSaver.file.read();
     fileSaver.file.close();
     fileSaver.file = null;
     success = true;
     return fileSaver;
   } finally {
     if (!success) {
       fileSaver.close();
     }
   }
 }