黑马程序员技术交流社区
标题:
关于递归和io流File对象报空指针的问题
[打印本页]
作者:
forDream
时间:
2014-3-25 22:00
标题:
关于递归和io流File对象报空指针的问题
public class ShowFileName {
public static void main(String[] args) {
File file = new File("e:\\aaa");
showMyFileName(file);
}
private static void showMyFileName(File file) {
// 定义文件数组
File[] files;
<font color="#ff0000">// 判断是否是文件
<b><u> if(file.isFile()){
// 判断文件类型 //
这样没有问题
if(file.getName().endsWith(".txt"))</u></b>
// 打印绝对路径和文件名
System.out.println(file.getAbsolutePath()+"::::::::::::"+file.getName());
}</font> else {
// 获取文件数组
files = file.listFiles();
// 遍历数组
for (int i = 0; i < files.length; i++) {
// 递归调用
showMyFileName(files[i]);
}
}
}
}
复制代码
private static void showMyFileName(File file) {// 定义文件数组 File[] files;// 判断是否是文件 // 判断文件类型
if(file.isFile()&&file.getName().endsWith(".txt"))
{//换成这样的话就会报异常
// 打印绝对路径和文件名
System.out.println(file.getAbsolutePath()+"::::::::::::"+file.getName()); } else {// 获取文件数组 files = file.listFiles();// 遍历数组 for (int i = 0; i < files.length; i++) {// 递归调用 showMyFileName(files
); } } /*
* Exception in thread "main" java.lang.NullPointerException
at com.itcast_03.ShowFileName.showMyFileName(ShowFileName.java:27)
at com.itcast_03.ShowFileName.showMyFileName(ShowFileName.java:29)
at com.itcast_03.ShowFileName.main(ShowFileName.java:12)
会报空指针异常 为什么啊
*/ }
}
作者:
郭黎明
时间:
2014-3-25 23:18
本帖最后由 郭黎明 于 2014-3-25 23:20 编辑
你的代码看上去好乱,首先先要得到集合,然后遍历集合,接着再判断,我写了一个,你应该能看懂public static void showMyFileName(File file) {
File [] files = file.listFiles();
for(File f :files ){
if(f.isFile()&&f.getName().endsWith(".txt"))
System.out.println(f.getName()+"-------"+f.getAbsolutePath());
if(f.isDirectory())
showMyFileName(f);
}
作者:
chen_x
时间:
2014-3-25 23:39
判断一个文件对象是否是文件或目录时,必须先用File类的exist()函数判断该文件对象封装的内容是否存在,否则很可能会有问题;
比如file.exist()为false时,那file.isFile()和file.isDirectory()都是返回false的,这样奇怪的现象出现了也不好排查,所以必须先判断file.exist()返回值。
代码中,如果机子上没有e:\\aaa这个目录,那调用showMyFileName函数时,if(file.isFile())条件为假,从而执行else语句,而else语句中files = file.listFiles();得到的files是为null的,所以后面再取files数组的长度和元素时就报空指针异常了。
main函数可以改一下:
public static void main(String[] args) {
File file = new File("e:\\aba");
System.out.println(file.getName());
if(file.exists()){
showMyFileName(file);
}else{
System.out.println("没有此文件!");
}
}
作者:
霍振鹏
时间:
2014-3-26 13:04
chen_x 发表于 2014-3-25 23:39
判断一个文件对象是否是文件或目录时,必须先用File类的exist()函数判断该文件对象封装的内容是否存在,否 ...
有 用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2