1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.jetspeed.util; 18 19 import java.io.File; 20 21 22 /* 23 * File System Directory Utilities. Some utilities that java.io doesn't give us. 24 * 25 * rmdir() - removes a directory and all subdirectories and files underneath. 26 * 27 * @author David S. Taylor <a href="mailto:taylor@apache.org">David Sean Taylor</a> 28 * @version $Id: DirectoryUtils.java 517124 2007-03-12 08:10:25Z ate $ 29 * 30 */ 31 public class DirectoryUtils 32 { 33 public static void main(String[] args) 34 { 35 DirectoryUtils.rmdir(new File(args[0])); 36 } 37 38 /*** 39 * Removes a directory and all subdirectories and files beneath it. 40 * 41 * @param directory The name of the root directory to be deleted. 42 * @return boolean If all went successful, returns true, otherwise false. 43 * 44 */ 45 public static final boolean rmdir(File dir) 46 { 47 if (dir.isDirectory()) 48 { 49 String[] children = dir.list(); 50 for (int i = 0; i < children.length; i++) 51 { 52 boolean success = rmdir(new File(dir, children[i])); 53 if (!success) 54 { 55 return false; 56 } 57 } 58 } 59 60 // The directory is now empty so delete it OR it is a plain file 61 return dir.delete(); 62 } 63 64 /*** 65 * Recursive deletion engine, traverses through all subdirectories, 66 * attempting to delete every file and directory it comes across. 67 * NOTE: this version doesn't do any security checks, nor does it 68 * check for file modes and attempt to change them. 69 * 70 * @param path The directory path to be traversed. 71 * 72 */ 73 // private static void deleteTraversal(String path) 74 // { 75 // File file = new File(path); 76 // if (file.isFile()) 77 // { 78 // try 79 // { 80 // file.delete(); 81 // } 82 // catch (Exception e) 83 // { 84 // log.error("Failed to Delete file: " + path + " : " , e); 85 // file.deleteOnExit(); // try to get it later... 86 // } 87 // } 88 // else if (file.isDirectory()) 89 // { 90 // if (!path.endsWith(File.separator)) 91 // path += File.separator; 92 // 93 // String list[] = file.list(); 94 // 95 // // Process all files recursivly 96 // for(int ix = 0; list != null && ix < list.length; ix++) 97 // deleteTraversal(path + list[ix]); 98 // 99 // // now try to delete the directory 100 // try 101 // { 102 // file.delete(); 103 // } 104 // catch (Exception e) 105 // { 106 // log.error("Failed to Delete directory: " + path + " : " , e); 107 // file.deleteOnExit(); // try to get it later... 108 // } 109 // 110 // } 111 // } 112 } 113 114