package jalview.io; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; public class BackupFilenameFilter implements FilenameFilter { public String base; public String template; public int digits; public String extension; public BackupFilenameFilter(String base, String template, int digits, String extension) { this.base = base; this.template = template; this.digits = digits; this.extension = extension; } @Override public boolean accept(File dir, String filename) { boolean ret = false; try { File file = new File( dir.getCanonicalPath() + File.separatorChar + filename); if (file.isDirectory()) { // backup files aren't dirs! return false; } } catch (IOException e) { System.out.println("IOException when checking file '" + filename + "' is a backupfile"); } BackupFilenameParts bffp = new BackupFilenameParts(filename, base, template, digits, extension); ret = bffp.isBackupFile(); return ret; } } class BackupFilenameParts { String base; String templateStart; int num; int digits; String templateEnd; String extension; boolean isBackupFile; public BackupFilenameParts(File file, String base, String template, int digits, String extension) { this(file.getName(), base, template, digits, extension); } public BackupFilenameParts(String filename, String base, String template, int digits, String extension) { this.isBackupFile = false; // calculate minimum length of a backup filename int minlength = base.length() + template.length() - BackupFiles.NUM_PLACEHOLDER.length() + digits + extension.length(); if (!(filename.startsWith(base) && filename.endsWith(extension) && filename.length() >= minlength)) { // non-starter return; } int numcharstart = template.indexOf(BackupFiles.NUM_PLACEHOLDER); String templateStart = template; String templateEnd = ""; if (numcharstart > -1) { templateStart = template.substring(0, numcharstart); templateEnd = template.substring(numcharstart + BackupFiles.NUM_PLACEHOLDER.length()); } int startLength = base.length() + templateStart.length(); int endLength = templateEnd.length() + extension.length(); String numString = filename.substring(startLength, filename.length() - endLength); if (filename.length() >= startLength + digits + endLength && filename.startsWith(base + templateStart) && filename.endsWith(templateEnd + extension) && numString.matches("[0-9]+")) { this.base = base; this.templateStart = templateStart; this.num = Integer.parseInt(numString); this.digits = digits; this.templateStart = templateStart; this.templateEnd = templateEnd; this.isBackupFile = true; } } public static String getBackupFilename(int index, String base, String template, int digits, String extension) { String numString = String.format("%0" + digits + "d", index); String backupSuffix = template.replaceAll(BackupFiles.NUM_PLACEHOLDER, numString); String backupfilename = base + backupSuffix + extension; return backupfilename; } public boolean isBackupFile() { return this.isBackupFile; } public int indexNum() { return this.num; } }