aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils/FileUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/utils/FileUtils.java')
-rw-r--r--main/src/cgeo/geocaching/utils/FileUtils.java43
1 files changed, 32 insertions, 11 deletions
diff --git a/main/src/cgeo/geocaching/utils/FileUtils.java b/main/src/cgeo/geocaching/utils/FileUtils.java
index c123469..778b9c7 100644
--- a/main/src/cgeo/geocaching/utils/FileUtils.java
+++ b/main/src/cgeo/geocaching/utils/FileUtils.java
@@ -4,6 +4,7 @@ import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.os.Handler;
import android.os.Message;
@@ -75,6 +76,24 @@ public final class FileUtils {
}
}
+ public static boolean deleteDirectory(@NonNull final File dir) {
+ final File[] files = dir.listFiles();
+
+ // Although we are called on an existing directory, it might have been removed concurrently
+ // in the meantime, for example by the user or by another cleanup task.
+ if (files != null) {
+ for (final File file : files) {
+ if (file.isDirectory()) {
+ deleteDirectory(file);
+ } else {
+ delete(file);
+ }
+ }
+ }
+
+ return delete(dir);
+ }
+
public static abstract class FileSelector {
public abstract boolean isSelected(File file);
@@ -92,18 +111,20 @@ public final class FileUtils {
* </ul>
* which does not yet exist.
*/
- public static File getUniqueNamedFile(final String baseNameAndPath) {
- final String extension = StringUtils.substringAfterLast(baseNameAndPath, ".");
- final String pathName = StringUtils.substringBeforeLast(baseNameAndPath, ".");
- int number = 1;
- while (new File(getNumberedFileName(pathName, extension, number)).exists()) {
- number++;
+ public static File getUniqueNamedFile(final File file) {
+ if (!file.exists()) {
+ return file;
}
- return new File(getNumberedFileName(pathName, extension, number));
- }
-
- private static String getNumberedFileName(final String pathName, final String extension, final int number) {
- return pathName + (number > 1 ? "_" + Integer.toString(number) : "") + "." + extension;
+ final String baseNameAndPath = file.getPath();
+ final String prefix = StringUtils.substringBeforeLast(baseNameAndPath, ".") + "_";
+ final String extension = "." + StringUtils.substringAfterLast(baseNameAndPath, ".");
+ for (int i = 1; i < Integer.MAX_VALUE; i++) {
+ final File numbered = new File(prefix + i + extension);
+ if (!numbered.exists()) {
+ return numbered;
+ }
+ }
+ throw new IllegalStateException("Unable to generate a non-existing file name");
}
/**