package lcj;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Houzhui {
public static int k = 0;
public static String a[] = new String[100];
public static void main(String args[]) throws IOException{
FindFile("d:/test");
}
public static void FindFile(String path) throws IOException{
int j;
File file = new File(path);
File[] list = file.listFiles();
String tmp;
FileWriter out = new FileWriter("d:/out.txt");
try{
for (int i = 0;i < list.length;i++){
if(list[i].isFile()){
tmp=list[i].getPath();
a[k] = tmp.substring(tmp.lastIndexOf(".") + 1);
for( j = 0; j < k; j++){
if(a[j].equals(a[k])){ //这有问题啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
k--;
break;
}
}
if(k == j){
System.out.println(a[k]);
out.write(a[k]);
out.flush();
}
k++;
}
else{
FindFile(list[i].getPath());
}
}
}catch(NullPointerException ne){
System.out.println("找不到指定路径!");
}
out.close();
}
}
问题之处如何更改啊?
------解决方案--------------------
去重用TreeSet,HashSet之类的,尽量不要用List自己判断
------解决方案--------------------
另外,当文件没有后缀名的时候,你的程序会直接把绝对路径输出,这也是不合适的;
还有,FileWriter对象应该这样创建:
FileWriter out = new FileWriter("d:/out.txt", true);
第二个参数表示再次打开文件写入时是在文件后添加。否则在递归过程中文件被重复打开,照你的写法out.txt将只会保留最后的一次输入。建议把FileWriter对象创建放到main方法里面去,然后作为参数传给FindFile()方法,一来避免重复创建流,二来可以解决上述问题,因为文件只打开一次,所以FileWriter对象就可以像你写的那样创建FileWriter out = new FileWriter("d:/out.txt");
最后就是建议用PrintWriter替代FileWriter,这样可以用PrintWriter的println()方法轻松做到文件中的换行。以上。