1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| /**
* Thread for deleting a file.
* Try again as long as the file isn't deleted and max tries allowed hasn't be exceeded.
*
* @author natha
*/
public class DeleteFileThread extends Thread {
/** The Logger */
private static Logger logger = Logger.getLogger(DeleteFileThread.class);
/** The file to delete */
private File file;
/** The delay before trying to delete */
private int delay;
/** Maximum tries allowed */
private int maxTries;
/** The number of tries */
private int count;
/** Default value for delay */
private static int DEFAULT_BEGIN_DELAY = 10000;
/** Default maximum tries allowed */
private static int DEFAULT_MAXIMUM_TRIES_ALLOWED = 3600; // 3600 * 1000 secondes = 1h
/**
* Default Constructor
*
* @param file The file to be deleted
* @param delay The delay before trying to delete
* @param maxTries Maximum tries allowed (0 means default)
*/
protected DeleteFileThread(File file, int delay, int maxTries) {
super();
this.file = file;
this.delay = delay;
this.maxTries = (maxTries == 0 ? DEFAULT_MAXIMUM_TRIES_ALLOWED : maxTries);
this.count = 0;
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
try {
sleep(delay);
while (count < maxTries && !file.delete() && file.exists()) {
count++;
sleep(1000); // sleep for 1sec (= try again in 1sec)
if (count == maxTries) {
logger.info("Max tries exceeded (" + maxTries + ") and the file '" + file.getCanonicalPath() + "' hasn't be deleted");
}
}
} catch (InterruptedException e) {
logger.fatal("Unexpected error", e);
} catch (IOException e) {
logger.fatal("Unexpected error", e);
}
}
/**
* @param file The file to be deleted
*/
public static void createThread(File file) {
createThread(file, DEFAULT_BEGIN_DELAY, 0);
}
/**
* @param file The file to be deleted
* @param delay The delay before trying to delete
*/
public static void createThread(File file, int delay) {
createThread(file, delay, 0);
}
/**
* @param file The file to be deleted
* @param delay The delay before trying to delete
* @param maxTries Maximum tries allowed (0 means default)
*/
public static void createThread(File file, int delay, int maxTries) {
DeleteFileThread dft = new DeleteFileThread(file, delay, maxTries);
dft.start();
}
} |
Partager