/*
*这个实例代码主要帮助大家了解,JAVA打印树型结构的一些基本思路以及文件过滤器的使用方法,例子非常的简短,没有再增加另外的功能,不过在今后的时间里我会把代码丰富起来,最终实现windows命令行tree命令的功能,感兴趣的朋友,欢迎积极评论,共同进步。
*/
import java.io.File;
import java.io.FileFilter;
public class PrintFile
{
public MyFileFilter myFileFilter = new MyFileFilter();//实例化一个过滤器
public String addString(boolean b)//追加字符串返回
{
StringBuffer sb = new StringBuffer(" ");
if(b)
{
return sb.append("").toString();
}
else
{
return sb.append(" ").toString();
}
}
public void printAllFile(boolean b,File namepath)throws Exception
{
if(!namepath.exists())//判断是不是一个文件
{
throw new Exception(namepath.getName() + "非法参数,不是文件");
}
if(namepath.isDirectory())//判断是不是一个文件夹
{
System.out.println(addString(b) + namepath.getName());//打印
File[] fileList = namepath.listFiles(myFileFilter);//通过过滤器得到文件数组
for(File f : fileList)
{
printAllFile(true,f);//递归调用,是文件夹传递true(前面不加空格)
}
}
System.out.println(addString(false) + namepath.getName());//不是文件夹,传递false(前面加两个空格)
}
public static void main(String[] args)
{
File f = null;
if(args.length < 1 )
{
f = new File("..");//如果命令行没有传参数默认为当前目录的上一级
}
else
{
f = new File(args[0]);
}
try
{
new PrintFile().printAllFile(true,f);
}
catch(Exception e)
{
}
}
}
class MyFileFilter implements FileFilter
{
public boolean accept(File filefilter)//指定路径名匹配为*.java并且包括目录
{
return filefilter.getPath().toLowerCase().endsWith(".java") || filefilter.isDirectory();
}
}