import java.io.*;
public class FileRead{
private static int space=0;
private static double totalFile = 0;
private static double totalDirectory = 0;
public String printSpace(int space){
String str = "";
for(int i=0;i<space;i++)
str += " ";
return str;
}
public void searchFile(File f)throws IOException{
String path = f.getAbsolutePath();
File currentFile = new File(path); //取得当前路径的文件
File[] file = currentFile.listFiles();
space++;
for(int i=0;i<file.length;i++){
System.out.println(printSpace(space) + file[i].getName());
if(file[i].isDirectory()){
totalDirectory += 1;
searchFile(file[i]);
if(space>0)
space--;
}
totalFile += 1;
}
}
public static void main(String args[])throws IOException{
String path = null;
if(args.length<1)
path =".";
else
path = args[0];
FileRead read = new FileRead();
File file = new File(path);
if(!file.exists()){
System.err.print("the path is error");
System.exit(1);
}
read.searchFile(file);
System.out.println("the file is :" + (totalFile-totalDirectory));
System.out.println("thd directory is : " + totalDirectory);
}
}
这个程序在便历多文件时会出现问题?不知道问题在哪里?
合成模式
合成模式他是一种树型结构,他可以通过对合成的图的单独部分方法达到对整个合成图方法问。他由三部分组成,抽象构件—Component和树枝构件—Composite以及树叶构件Leaf。合成模式分为两种,一种是透明式的。另一个是安全式的合成模式。
透明式的合成模式和安全式的合成模式,他们的组成成分都一样,他们的区别是:透明式的合成模式,他在抽象构件种增加了操作子类对象的一些接口,这样在实现的过程中,无论是树枝构件还是树叶构件都必须实现这些接口,这对树叶构件来说,这种接口实现是多余的,所以树叶构件是通过平庸式的方式来实现,这种实现,将造成编译时可以通过,但是当用户在应用的过程过如果调用这些方法,将造成运行时的错误,这就造成了程序的不安全;而安全式的合成模式,他并没有在抽象构件实现对子结点接口的申明,他是通过树枝直接对管理子类所需要的方法进行申明,这就给程序带来灵活性,但是也给程序带来不便的管理性,这种实现使得程序不会出现运行时的错误。
一般我们在这样的情况下应用合成模式:
1、当我们要体现构件的部分和整体的结构时。
2、当我们要要忽略个体构件与整体构件的区别时,并且要平等的对待个体构件和整体构件时。
使用合成构件有以下好处:
1、使用合成模式可以很容易的增加新构件的种类。
2、使用合成模式方便了用户对构件的使用,因为他们不用担心使用的是树页构件还是树枝构件。
他的缺点:使用合成模式之后在控制树枝构件的类型就不是那么容易了。
posted on 2005-08-02 01:56
sky 阅读(175)
评论(0) 编辑 收藏