关于递归调用函数的一个问题

greening 2007-02-20 05:48:43
我这段代码目的是打印出一个文件夹下所有文件和文件夹的名字。如果文件夹下还有文件,则递归调用该函数,打印该子文件夹下的文件和文件夹的名字,直到最后只剩文件为止。
代码如下:

import java.io.File;

public class Test {

public Test() {
}
public void readFolderByFile(String filePath)
{
File file = new File(filePath);
File[] tempFile = file.listFiles();
for(int i = 0;i<tempFile.length;i++)
{
if(tempFile[i].isFile())
{
System.out.println("File : "+tempFile[i].getName());
}
if(tempFile[i].isDirectory())
{
String subDirectory = tempFile[i].getName();
System.out.println("Directory : "+subDirectory);
readFolderByFile(subDirectory); //递归调用在此
}
}
}

public static void main(String Args[])
{
Test test = new Test();
test.readFolderByFile("E:\\shared");
}

}

编译通过,运行,打印出直到第一个文件夹(包括第一个文件夹)的文件的名字后抛出NullPointerException。如下:

--------------------Configuration: <Default>--------------------
File : 1.txt
File : 123.txt
Directory : subshared
Exception in thread "main" java.lang.NullPointerException
at Test.readFolderByFile(Test.java:18)
at Test.readFolderByFile(Test.java:28)
at Test.main(Test.java:36)

Process completed.

请问如何解决?
...全文
336 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
interpb 2007-02-20
  • 打赏
  • 举报
回复
性能再损失能有多少

不要计较这点小的效率

数组肯定不行

用List吧 动态数组
greening 2007-02-20
  • 打赏
  • 举报
回复
谢谢楼上。再问一下,我打算用一个private String[]来存储这些文件名,需要预设数组的大小,这样可能会导致越界,或者没有装满,以致于这个数组后面部分打印出来为null。如果换用vector,会有性能的损失,而且影响输入输出的规范,请各位给点建议。
interpb 2007-02-20
  • 打赏
  • 举报
回复
if (tempFile[i].isDirectory()) {
String subDirectory = tempFile[i].getName();
System.out.println("Directory : " + subDirectory);
readFolderByFile(tempFile[i].getAbsolutePath()); // 递归调用在此
}

这样就可以了

根据绝对路径构造文件

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧