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}