001    package com.basilv.core;
002    
003    
004    import java.io.File;
005    import java.io.IOException;
006    
007    /**
008     * Contains utility methods for working with Files.
009     */
010    public 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    }