/**
* 用于熟悉递归
* 简单的阶乘、斐波那契额数列、删除文件(包括文件夹)、访问文件(输出文件按树状输出)
*
* @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;
}
}