    001package com.basilv.core;
    002
    003
    004import java.io.File;
    005import java.io.IOException;
    006
    007/**
    008 * Contains utility methods for working with Files.
    009 */
    010public class FileUtilities
    011{
    012
    013        /**
    014         * Return the canonical path, or the absolute path if an error occurs.
    015         * @param file  Cannot be null.
    016         * @return the full path of the file.
    017         */
    018        public static String getCanonicalPath(File file) {
    019                Assert.notNull("file", file);
    020                try {
    021                        return file.getCanonicalPath();
    022                } catch (IOException e) {
    023                        return file.getAbsolutePath();
    024                }
    025        }
    026
    027
    028        /**
    029         * Delete the specified directory and all its contents.
    030         * @param file  Cannot be null. If a file is specified, it is deleted.
    031         */
    032        public static void deleteRecursively(File file) {
    033                Assert.notNull("file", file);
    034
    035                if (file.isDirectory()) {
    036                        File[] files = file.listFiles();
    037                        for (int i = 0; i < files.length; i++) {
    038                                deleteRecursively(files[i]);
    039                        }
    040                }
    041                deleteFile(file);
    042        }
    043
    044        public static void deleteFile(File file) {
    045                Assert.notNull("file", file);
    046
    047                if (!file.delete()) {
    048                        // Perhaps we couldn't delete the file because it no longer exists.
    049                        if (file.exists()) {
    050                                throw new RuntimeException("Unable to delete file '" + FileUtilities.getCanonicalPath(file) + "'.");
    051                        }
    052                }
    053
    054        }
    055}