Updated delete to correctly do name + full path matching, also to normalize the file names

This commit is contained in:
nathan 2015-12-17 02:06:46 +01:00
parent bffa46cd27
commit 660df53f23

View File

@ -457,6 +457,7 @@ class FileUtil {
* Deletes a file or directory and all files and sub-directories under it. * Deletes a file or directory and all files and sub-directories under it.
* *
* @param fileNamesToIgnore if prefaced with a '/', it will ignore as a directory instead of file * @param fileNamesToIgnore if prefaced with a '/', it will ignore as a directory instead of file
* @return true iff the file/dir was deleted
*/ */
public static public static
boolean delete(String fileName, String... fileNamesToIgnore) { boolean delete(String fileName, String... fileNamesToIgnore) {
@ -471,11 +472,12 @@ class FileUtil {
* Deletes a file or directory and all files and sub-directories under it. * Deletes a file or directory and all files and sub-directories under it.
* *
* @param namesToIgnore if prefaced with a '/', it will ignore as a directory instead of file * @param namesToIgnore if prefaced with a '/', it will ignore as a directory instead of file
* @return true iff the file/dir was deleted (or didn't exist)
*/ */
public static public static
boolean delete(File file, String... namesToIgnore) { boolean delete(File file, String... namesToIgnore) {
if (!file.exists()) { if (!file.exists()) {
return false; return true;
} }
boolean ignored = false; boolean ignored = false;
@ -486,13 +488,25 @@ class FileUtil {
for (int i = 0, n = files.length; i < n; i++) { for (int i = 0, n = files.length; i < n; i++) {
boolean delete = true; boolean delete = true;
String name2 = files[i].getName(); final File file2 = files[i];
String name2 = file2.getName();
String name2Full = normalize(file2.getAbsolutePath());
if (files[i].isDirectory()) { if (file2.isDirectory()) {
for (String name : namesToIgnore) { for (String name : namesToIgnore) {
if (name.startsWith("/") && name.equals(name2)) { if (name.startsWith("/") && name.equals(name2)) {
// only name match
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
logger2.trace("Skipping delete dir: {}", files[i]); logger2.trace("Skipping delete dir: {}", file2);
}
ignored = true;
delete = false;
break;
}
else if (name.equals(name2Full)) {
// full path match
if (logger2.isTraceEnabled()) {
logger2.trace("Skipping delete dir: {}", file2);
} }
ignored = true; ignored = true;
delete = false; delete = false;
@ -502,16 +516,26 @@ class FileUtil {
if (delete) { if (delete) {
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
logger2.trace("Deleting dir: {}", files[i]); logger2.trace("Deleting dir: {}", file2);
} }
delete(files[i], namesToIgnore); delete(file2, namesToIgnore);
} }
} }
else { else {
for (String name : namesToIgnore) { for (String name : namesToIgnore) {
if (!name.startsWith("/") && name.equals(name2)) { if (!name.startsWith("/") && name.equals(name2)) {
// only name match
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
logger2.trace("Skipping delete file: {}", files[i]); logger2.trace("Skipping delete file: {}", file2);
}
ignored = true;
delete = false;
break;
}
else if (name.equals(name2Full)) {
// full path match
if (logger2.isTraceEnabled()) {
logger2.trace("Skipping delete file: {}", file2);
} }
ignored = true; ignored = true;
delete = false; delete = false;
@ -521,9 +545,9 @@ class FileUtil {
if (delete) { if (delete) {
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
logger2.trace("Deleting file: {}", files[i]); logger2.trace("Deleting file: {}", file2);
} }
files[i].delete(); file2.delete();
} }
} }
} }
@ -535,7 +559,7 @@ class FileUtil {
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
logger2.trace("Skipping deleting file: {}", file); logger2.trace("Skipping deleting file: {}", file);
} }
return true; return false;
} }
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
@ -555,7 +579,7 @@ class FileUtil {
throw new IllegalArgumentException("fileDir cannot be null."); throw new IllegalArgumentException("fileDir cannot be null.");
} }
String path = location.getAbsolutePath(); String path = normalize(location).getAbsolutePath();
if (location.mkdirs()) { if (location.mkdirs()) {
Logger logger2 = logger; Logger logger2 = logger;
if (logger2.isTraceEnabled()) { if (logger2.isTraceEnabled()) {
@ -588,7 +612,7 @@ class FileUtil {
throw new IllegalArgumentException("fileName cannot be null"); throw new IllegalArgumentException("fileName cannot be null");
} }
return File.createTempFile(fileName, null).getAbsoluteFile(); return normalize(File.createTempFile(fileName, null)).getAbsoluteFile();
} }
/** /**
@ -609,7 +633,7 @@ class FileUtil {
throw new IOException("Unable to create temp directory: " + file); throw new IOException("Unable to create temp directory: " + file);
} }
return file.getAbsolutePath(); return normalize(file).getAbsolutePath();
} }
/** /**