用递归列出和删除文件的所有目录
public static int factorial(int number){ int result; if(number == 1) //递归出口 { result = 1; } else { result = number * factorial(number - 1); } return result;}
?
public static void deleteAll(File file){ if(file.isFile() || file.list().length == 0) //递归出口 { file.delete(); } else { File[] files = file.listFiles(); for(File f : files) { deleteAll(f); f.delete(); //删除最后的空目录 } }}
?
列出当前目录及子目录的所有文件及目录
?
/*粗略的版本*/public static void listAll(File file){ //递归出口,file为文件或空目录时打印出filename if(file.isFile() || file.list().length == 0) { System.out.println(file.getName()); } else { //先打印父目录 System.out.println(file.getName()); File[] files = file.listFiles(); for(File f : files) { listAll(f); } }}?
/*带Tab格式的排序的版本*///用于判断目录或文件所处的层次private static int time;public static void listAll(File file){ if(file.isFile() || file.list().length == 0) { System.out.println(getTabs(time) + file.getName() + (file.isFile() ? "" : "\")); } else { System.out.println(getTabs(time) + file.getName() + "\"); File[] files = file.listFiles(); sort(files); for(File f : files) { time++; listAll(f); time--; } }}//判断需要加多少 tab的方法private static String getTabs(int time){ StringBuffer buffer = new StringBuffer(); for(int i = 0; i < time; i++){ buffer.append("\t");} return buffer.toString();}// 整理文件,使得目录排在文件之前private static void sort(File[] files){ ArrayList<File> sorted = new ArrayList<File>(); // 寻找到所有的目录 for (File f : files) { if (f.isDirectory()) { sorted.add(f); } } // 寻找到所有的文件 for (File f : files) { if (f.isFile()) { sorted.add(f); } } files = sorted.toArray(new File[files.length]);}?
?
?
?