日期:2014-05-20  浏览次数:20827 次

子目录路径能打印出来,但是为啥输出到文本却无法输出子目录里的路径?
我想把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();
}

}
}

------解决方案--------------------
先看看你的代码:

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 ");
}
}
}

}
}