我想把D:/Test里的所有文件的路径打印出来,其中D:/Test 里有a.txt;b.txt子目录123 子目录里有c.txt;d.txt,我写了以下程序 在屏幕上打印能把D:/Test下的a.txt;b.txt 和 D:/Test/123/c.txt与D:/Test/123/d.txt  但是输出到一个文本中却无法输出D:/Test/123/c.txt与D:/Test/123/d.txt  这是为什么 代码如下 解决后马上散分
public class Test4 
{
public static void main(String[] args) throws IOException
{
File folder = new File("D:/Test");
findTxtFile(folder);

}
public static void findTxtFile(File folder) throws IOException
{
ArrayList list = new ArrayList();
BufferedWriter out = new BufferedWriter(new FileWriter("c:/aa.txt"));
File files[] = folder.listFiles();
if(files == null && files.length <= 0)
{
System.out.println("没有文件");
}
else 
{
for(int i = 0; i < files.length; i++)
{
File file = files[i];
if(file.isDirectory())
{
findTxtFile(file);
System.out.println(file.getName());
}
else
{
System.out.println(file.getPath());
out.write(file.getPath()+"\n");
}
}
out.close();
}

}
}

解决方案 »

  1.   

    先看看你的代码:findTxtFile()方法体的第二行是:
    BufferedWriter out = new BufferedWriter(new FileWriter("c:/aa.txt"));
    表示在方法内部生成一个BufferedWriter类型的out对象在for循环里,有代码:findTxtFile(file);
    就是说要递归调用此方法。但是要注意的是,在调用findTxtFile这个方法的时候,在新调用的方法内部又会产生一个out对象,而且指向同一个文件,这样,文件的内容会被覆盖掉,但是屏幕上输出的内容不会被覆盖,所以会产生你所说的情况。代码可以修改为:import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;public class Test4 {    static BufferedWriter out;
        
        public static void main(String[] args) throws IOException {
            File folder = new File("D:/Test");
            out = new BufferedWriter(new FileWriter("d:/aa.txt"));
            findTxtFile(folder);
            out.close();    }    public static void findTxtFile(File folder) throws IOException {
            File files[] = folder.listFiles();
            if (files == null && files.length <= 0) {
                System.out.println("没有文件");
            } else {
                for (int i = 0; i < files.length; i++) {
                    File file = files[i];
                    if (file.isDirectory()) {
                        out.write(file.getPath() + "\n");
                        findTxtFile(file);
                        System.out.println(file.getPath());
                    } else {
                        System.out.println(file.getPath());
                        out.write(file.getPath() + "\n");
                    }
                }
            }    }
    }
      

  2.   

    结贴 非常感谢 真是疏忽了这个环节 明白这个原理 我把BufferedWriter  out  =  new  BufferedWriter(new  FileWriter("c:/aa.txt"));  
    改成BufferedWriter  out  =  new  BufferedWriter(new  FileWriter("c:/aa.txt",true));   就解决了 谢谢你的建议 散分