import java.io.File;
import java.io.FilenameFilter;
+import java.io.IOException;
public class BackupFilenameFilter implements FilenameFilter
{
}
@Override
- public boolean accept(File file, String filename)
+ public boolean accept(File dir, String filename)
{
- // CHECK THIS IS NOT ALWAYS THE PARENT DIR
- if (file.isDirectory())
+ boolean ret = false;
+ try
{
- return true;
- }
- else
+ File file = new File(
+ dir.getCanonicalPath() + File.separatorChar + filename);
+ if (file.isDirectory())
+ {
+ // backup files aren't dirs!
+ return false;
+ }
+ } catch (IOException e)
{
- BackupFilenameParts bffp = new BackupFilenameParts(filename, base,
- template, digits, extension);
- return bffp.isBackupFile();
+ 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
{
- File file;
-
String base;
String templateStart;
{
this.isBackupFile = false;
- if (!(filename.startsWith(base) && filename.endsWith(extension)))
+ // 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;
}
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 + 1);
+ 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.file = file;
this.base = base;
this.templateStart = templateStart;
this.num = Integer.parseInt(numString);