+ File dirFile;
+ try
+ {
+ dirFile = file.getParentFile();
+ } catch (Exception e)
+ {
+ Console.error("Could not get canonical path for file '" + file + "'");
+ return new TreeMap<>();
+ }
+
+ String filename = file.getName();
+ String basename = filename;
+
+ // find existing backup files
+ BackupFilenameFilter bff = new BackupFilenameFilter(basename, suffix,
+ digits);
+ backupFiles = dirFile.listFiles(bff); // is clone needed?
+
+ // sort the backup files (based on integer found in the suffix) using a
+ // precomputed Hashmap for speed
+ Map<Integer, File> bfHashMap = new HashMap<>();
+ for (int i = 0; i < backupFiles.length; i++)
+ {
+ File f = backupFiles[i];
+ BackupFilenameParts bfp = new BackupFilenameParts(f, basename, suffix,
+ digits);
+ bfHashMap.put(bfp.indexNum(), f);
+ }
+ TreeMap<Integer, File> bfTreeMap = new TreeMap<>();
+ bfTreeMap.putAll(bfHashMap);
+
+ return bfTreeMap;
+ }
+
+ /*
+ private boolean addDeleteFile(File fileToBeDeleted, File originalFile,
+ boolean delete, boolean newer)
+ {
+ return addDeleteFile(fileToBeDeleted, originalFile, null, delete, newer);
+ }
+ */
+ private boolean addDeleteFile(File fileToBeDeleted)
+ {
+ boolean ret = false;
+ int pos = deleteFiles.indexOf(fileToBeDeleted);
+ if (pos > -1)
+ {
+ Console.debug("BACKUPFILES not adding file "
+ + fileToBeDeleted.getAbsolutePath()
+ + " to the delete list (already at index" + pos + ")");
+ return true;
+ }
+ else
+ {
+ Console.debug("BACKUPFILES adding file "
+ + fileToBeDeleted.getAbsolutePath() + " to the delete list");
+ deleteFiles.add(fileToBeDeleted);
+ }
+ return ret;
+ }
+
+ public static boolean moveFileToFile(File oldFile, File newFile)
+ {
+ Console.initLogger();
+ boolean ret = false;
+ Path oldPath = Paths.get(oldFile.getAbsolutePath());
+ Path newPath = Paths.get(newFile.getAbsolutePath());
+ try
+ {
+ // delete destination file - not usually necessary but Just In Case...
+ Console.trace("BACKUPFILES deleting " + newFile.getAbsolutePath());
+ newFile.delete();
+ Console.trace("BACKUPFILES moving " + oldFile.getAbsolutePath()
+ + " to " + newFile.getAbsolutePath());
+ Files.move(oldPath, newPath, StandardCopyOption.REPLACE_EXISTING);
+ ret = true;
+ Console.trace("BACKUPFILES move seems to have succeeded");
+ } catch (IOException e)
+ {
+ Console.warn("Could not move file '" + oldPath.toString() + "' to '"
+ + newPath.toString() + "'");
+ Console.error(e.getMessage());
+ Console.debug(Cache.getStackTraceString(e));
+ ret = false;
+ } catch (Exception e)
+ {
+ Console.error(e.getMessage());
+ Console.debug(Cache.getStackTraceString(e));
+ ret = false;
+ }
+ return ret;
+ }
+}