求助:Exception in thread "main" java.lang.NullPointerException

gahade 2007-01-10 04:43:29
import java.io.*;
public class DirFile{
static String fileResult[];
public static void printDirect(File root){
File myFile = new File(root,"123.txt");
if (myFile.exists()){
System.out.println(root);
if(fileResult==null){
//就是下面这一句出错!
fileResult[0] = root.getPath();
}
else
fileResult[fileResult.length] = root.getPath();
}
File subroots[]=root.listFiles(new FileFilter(){
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
if(subroots!=null){
for(int i=0;i<subroots.length;i++){
printDirect(subroots[i]);
}
}
}
public static void main(String[] args) throws Exception {
printDirect(new File("d:\\"));
if(fileResult!=null){
for(int i=0;i<fileResult.length;i++){
System.out.println(fileResult[i]);
}
}
}
}

javac时不出错,java时出错信息如下:
Exception in thread "main" java.lang.NullPointerException
at DirFile.printDirect(DirFile.java:9)
at DirFile.printDirect(DirFile.java:21)
at DirFile.printDirect(DirFile.java:21)
at DirFile.main(DirFile.java:26)
我就是想在printDirect方法时把查找到包含123.txt文件的目录放到fileResult数组里,再在main方法时显示出来.但是为什么会错呢?
我是新手,希望高手们帮帮忙!
...全文
2255 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gahade 2007-01-10
  • 打赏
  • 举报
回复
jacktan(贫僧法号[梦遗]) 的正确!
非常感谢,晚上结贴!
谈祥庆 2007-01-10
  • 打赏
  • 举报
回复
仔细的看了你的程序,你的程序是递归查找一个指定的文件,一下是我修改的:
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

public class DirFile {
static List fileResult = new ArrayList();

public static void printDirect(File root) {
File myFile = new File(root, "123.txt");
if (myFile.exists()) {
fileResult.add(root.getPath());
}
File subroots[] = root.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
if (subroots != null) {
for (int i = 0; i < subroots.length; i++) {
printDirect(subroots[i]);
}
}
}

public static void main(String[] args) throws Exception {
printDirect(new File("d:\\"));

if (fileResult != null) {
for (int i = 0; i < fileResult.size(); i++) {
System.out.println(fileResult.get(i));
}
}
}
}

测试通过
gahade 2007-01-10
  • 打赏
  • 举报
回复
用静态的数组是因为我在下面可能还会用到查找到的文件的路径信息(拷贝删除什么的).
fileResult[fileResult.length] 当fileResult中没有下标的时候不是0吗?这样就是fileResult[0]="值",当有一个下标时是1,就是fileResult[1]="值",不知道我的想法是不是错的(我太菜了:)).请指出!
谈祥庆 2007-01-10
  • 打赏
  • 举报
回复
可用集合,List<String> fileResult = new ArrayList<String>();

可查JAVA的API文档
gahade 2007-01-10
  • 打赏
  • 举报
回复
我把第3行改为static String fileResult[] = new String[10];也不行啊,还是报一样的错!
另外定义的时候数组的长度并不知道啊,一定要定义一个定长的数组吗?而且我在每查找到一次文件的时候才知道数组长度=数组长度+1啊!
边城狂人 2007-01-10
  • 打赏
  • 举报
回复
if (fileResult == null) {
//就是下面这一句出错!
fileResult[0] = root.getPath();
} else
fileResult[fileResult.length] = root.getPath();

这里我没搞明白你为什么要用数组
实际是你整个程序只在这一个地方对数组元素进行了赋值,而且这里还很有问题。
且不说没有生成数组实例,就算生成了 fileResult[fileResult.length] 也一定会抛出IndexOutOfBoundException的,因为fileResult的索引号是从0到fileResult.length - 1
边城狂人 2007-01-10
  • 打赏
  • 举报
回复
Java中的数组是一个类,所以,需要先用new生成实例之后才能使用。
你的static String[] fileResult,只是声明了一个String数组类型的变量,但并没有产生String数组类型的对象
所以,你应该fileResult = new String[n]
这里n值根据你的实际情况填入一个常量或的整型变量


谈祥庆 2007-01-10
  • 打赏
  • 举报
回复
初始化语句为static String fileResult[] = new String[10];

不过如果无法确定数组的长度可以改用集合,List,Set都可以
gahade 2007-01-10
  • 打赏
  • 举报
回复
jacktan能说详细一点吗?我太菜了,不明白!-_-
我如果初始化它不就有值了吗?我想让它里面没值,然后我查找到值的时候再给它赋值,并且从0开始.怎样实现呢?
谈祥庆 2007-01-10
  • 打赏
  • 举报
回复
fileResult[]是数组,数组在JAVA中是对象,所以默认初始化为null,你需要自己在构造方法中初始化这个Field.都则默认为null,然后在没有初始化的情况下直接使用这个数组就会出现空指针错误.这个是Java比C/C++强的一个方面

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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