4 import java.io.FilenameFilter;
5 import java.io.IOException;
7 public class BackupFilenameFilter implements FilenameFilter
12 public String template;
16 public String extension;
18 public BackupFilenameFilter(String base, String template, int digits,
22 this.template = template;
24 this.extension = extension;
28 public boolean accept(File dir, String filename)
34 dir.getCanonicalPath() + File.separatorChar + filename);
35 if (file.isDirectory())
37 // backup files aren't dirs!
40 } catch (IOException e)
42 System.out.println("IOException when checking file '" + filename
43 + "' is a backupfile");
46 BackupFilenameParts bffp = new BackupFilenameParts(filename, base,
47 template, digits, extension);
48 ret = bffp.isBackupFile();
54 class BackupFilenameParts
70 public BackupFilenameParts(File file, String base, String template, int digits,
73 this(file.getName(), base, template, digits, extension);
76 public BackupFilenameParts(String filename, String base, String template,
77 int digits, String extension)
79 this.isBackupFile = false;
81 // calculate minimum length of a backup filename
82 int minlength = base.length() + template.length()
83 - BackupFiles.NUM_PLACEHOLDER.length() + digits
86 if (!(filename.startsWith(base) && filename.endsWith(extension)
87 && filename.length() >= minlength))
93 int numcharstart = template.indexOf(BackupFiles.NUM_PLACEHOLDER);
94 String templateStart = template;
95 String templateEnd = "";
96 if (numcharstart > -1)
98 templateStart = template.substring(0, numcharstart);
99 templateEnd = template.substring(numcharstart + BackupFiles.NUM_PLACEHOLDER.length());
102 int startLength = base.length() + templateStart.length();
103 int endLength = templateEnd.length() + extension.length();
104 String numString = filename.substring(startLength,
105 filename.length() - endLength);
107 if (filename.length() >= startLength + digits + endLength
108 && filename.startsWith(base + templateStart)
109 && filename.endsWith(templateEnd + extension)
110 && numString.matches("[0-9]+"))
113 this.templateStart = templateStart;
114 this.num = Integer.parseInt(numString);
115 this.digits = digits;
116 this.templateStart = templateStart;
117 this.templateEnd = templateEnd;
118 this.isBackupFile = true;
123 public static String getBackupFilename(int index, String base,
125 int digits, String extension)
127 String numString = String.format("%0" + digits + "d", index);
128 String backupSuffix = template.replaceAll(BackupFiles.NUM_PLACEHOLDER,
130 String backupfilename = base + backupSuffix + extension;
131 return backupfilename;
134 public boolean isBackupFile()
136 return this.isBackupFile;
139 public int indexNum()