/** * 用于熟悉递归 * 简单的阶乘、斐波那契额数列、删除文件(包括文件夹)、访问文件(输出文件按树状输出) * * @author wangzhu */ import java.io.File; import java.util.Iterator; import java.util.TreeSet; public class Deno { /** * @param args */ public static void main(String[] args) { System.out.println(factorial(5)); for (int i = 1; i < 10; i++) { System.out.println(fibonacci(i)); } String fileString = "E:/ceshi"; printDir(new File(fileString), 0); printTreeFile(new File(fileString), 0); } /** * 阶乘 n!=n*(n-1)*...*2*1 f(x)=x*f(x-1) * * @param number * @return */ public static int factorial(int number) { if (1 == number) { return 1; } int temp = factorial(number - 1); return number * temp; } /** * 斐波那契数列 a[n]=a[n-1]+a[n-2](a[1]=1,a[2]=1) * * @param number * @return */ public static int fibonacci(int number) { if (1 == number || 2 == number) { return 1; } return fibonacci(number - 1) + fibonacci(number - 2); } /** * 删除某文件下的所有文件 * * @param file */ public static void deleteAll(File file) { if (file.isFile() || 0 == file.list().length) { file.delete(); return; } for (File f : file.listFiles()) { // 删除wenjianf下的所有文件 deleteAll(f); // 最后删除自己,只有空的文件夹(目录)才可以被删除,否则出错 f.delete(); } } /** * 按默认的读取方式输出某文件下的所有文件名,桉树状输出 * * @param file * @param k */ public static void printTreeFile(File file, int k) { for (File f : file.listFiles()) { for (int i = 0; i <= k; i++) { System.out.print("\t"); } System.out.println(f.getName()); if (f.isDirectory()) { printTreeFile(f, ++k); } } } /** * 输出目录与文件 现有文件再是目录,按树状输出 * * @param file * @param k */ public static void printDir(File file, int k) { File[] files = file.listFiles(); TreeSet<HelperFile> ts = new TreeSet<HelperFile>(); HelperFile hf = null; for (File f : files) { hf = new HelperFile(f); ts.add(hf); } Iterator<HelperFile> it = ts.iterator(); while (it.hasNext()) { hf = it.next(); for (int i = 0; i <= k; i++) { System.out.print("\t"); } if (hf.file.isFile()) { System.out.println(hf.file.getName()); } else { System.out.println(hf.file.getName()); printDir(hf.file, ++k); } } } } class HelperFile implements Comparable<HelperFile> { File file; public HelperFile(File file) { this.file = file; } @Override public int compareTo(HelperFile hf) { if (hf.file.isDirectory()) { if (this.file.isDirectory()) { return this.file.getName().compareTo(hf.file.getName()); } return -1; } return 1; } }