本帖最后由 u012526168 于 2014-06-15 03:57:59 编辑

解决方案 »

  1.   

    去重用TreeSet,HashSet之类的,尽量不要用List自己判断
      

  2.   

    在你写有问题的那一行的下一行:
    k--;
    的下面再加一行:
    j--;
    或者把上面说的:
    k--;
    这一行去掉,然后将下面:if (k == j) {
        System.out.println(a[k]);
        out.write(a[k]);
        out.flush();
    }
    k++;改成if (k == j) {
        System.out.println(a[k]);
        out.write(a[k]);
        out.flush();
        k++;
    }最后再提个建议,你这个面对两个后缀名字母一样但大小写不一样的时候会判断成不同的后缀名,按理说应该是相同的。以上。
      

  3.   

    另外,当文件没有后缀名的时候,你的程序会直接把绝对路径输出,这也是不合适的;
    还有,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()方法轻松做到文件中的换行。以上。
      

  4.   

    另外,当文件没有后缀名的时候,你的程序会直接把绝对路径输出,这也是不合适的;
    还有,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()方法轻松做到文件中的换行。以上。
    谢谢了