为什么报java.lang.NullPointerException

wto1069280305 2012-08-05 11:40:19
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class StorageJavaDemo {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {

/*
* 需求:对指定目录中的所有(包含子目录)的Java文件的绝对路径写入到一个文本文件中。
* 这样查找某个java文件会比较便捷。
* 思路:
* 1、首先要遍历到所有的目录及其目录的子文件夹及其子文件,由于不知道目录层级,所以要用到递归
* 2、由于只需要java文件所以要用到文件过滤器
* 3、由于java文件不止一个,所以要定义一个容器将其存进去
* 4、然后将其写入到一个文件中,这需要用到写入流
*/


//将一一个文件封装成对象
File f=new File("E:\\");

//定义一个容器用于存储遍历到的java文件
StringBuilder sb=new StringBuilder();

//定义一个写出流对象
FileWriter fw=new FileWriter("E:\\java.txt");

storageJava(f,sb);

//定义一个功能写出输出文件
outPutJava(fw,sb);
}

public static void outPutJava(FileWriter fw, StringBuilder sb) throws IOException {

String str=sb.toString();
char[] ch=new char[str.length()];

fw.write(ch);
fw.flush();
fw.close();
}

public static void storageJava(File f,StringBuilder sb) {


//遍历文件
File[] f2=f.listFiles();

if(f2!=null);
//使用递归方法找出文件夹中的java文件
for (File f1:f2) {
if(f1.isDirectory()){
storageJava(f1,sb);
}else{

//如果不是目录就把java文件存到哪容器中
if(f.getName().endsWith(".java"));
sb.append(f1.getAbsolutePath());
}
}


}

}
...全文
577 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉他猪 2012-08-06
  • 打赏
  • 举报
回复

if(f.getName().endsWith(".java"));


这里有问题啊,你上面将f遍历了去判断它的子文件,f1, 你这里就应该是f1然不是f
将if(f.getName().endsWith(".java"));改为f1在看看
a395885670 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

至少说明NullPointException的位置在哪吧?

另外发现一个逻辑Bug:
String str=sb.toString();
char[] ch=new char[str.length()];
fw.write(ch);
根本就是写了空的char数组进文件中,应该是:
char[] ch = sb.toString().toCharArray();
……
[/Quote]
+1
老9 2012-08-06
  • 打赏
  • 举报
回复
把整个异常错误都贴出来吧。。
DayDreamer922 2012-08-06
  • 打赏
  • 举报
回复
结合1楼2楼的
q1191023580 2012-08-06
  • 打赏
  • 举报
回复
import java.io.File;
import java.io.FileFilter;
import java.io.FileWriter;
import java.io.IOException;

public class StorageJavaDemo {

public static void main(String[] args) throws Exception {
File f = new File("D:\\Work");

StringBuilder sb = new StringBuilder();

FileWriter fw = new FileWriter(new File("D:\\java.txt"));
outPutJava(fw, strogeJava(f, sb));
}

private static void outPutJava(FileWriter fw, StringBuilder sb1)
throws IOException {
String str = sb1.toString();

fw.write(str);
fw.flush();
fw.close();

}

static class FileterJava implements FileFilter{

@Override
public boolean accept(File f) {
boolean flag = false;
if(f.getAbsolutePath().endsWith(".java")){
flag = true;
}
return flag;
}

}
private static StringBuilder strogeJava(File f, StringBuilder sb) {
StringBuilder sb1 = null;
File[] f2 = f.listFiles();
if (f2 != null) {
for (File f3 : f2) {
if (f3.isDirectory()) {
strogeJava(f3, sb);
} else {
if (new FileterJava().accept(f3));

sb1 =sb.append(f3.getAbsolutePath());
System.out.println(sb1.toString());
}

}
}
return sb1;

}
}
MiceRice 2012-08-06
  • 打赏
  • 举报
回复
至少说明NullPointException的位置在哪吧?

另外发现一个逻辑Bug:
String str=sb.toString();
char[] ch=new char[str.length()];
fw.write(ch);
根本就是写了空的char数组进文件中,应该是:
char[] ch = sb.toString().toCharArray();
fw.write(ch);

62,620

社区成员

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

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