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