永发信息网

请教一个问题:为什么总是出现“Exception in thread "main" java.lang.NullPointerException”报错?

答案:5  悬赏:0  手机版
解决时间 2021-12-24 16:56
  • 提问者网友:温旧梦泪无声
  • 2021-12-24 13:30
JAVA程序代码如下
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;

public class CopyFile {

String sourcepath;
String aimpath;
Vector<String> vec;

public CopyFile(String sourcepath,String aimpath)
{
this.sourcepath = sourcepath;
this.aimpath = aimpath;
vec = new Vector <String> ();
}

public void Filename()
{
File f = new File(sourcepath);
String sub[] = f.list();
for(int i = 0;i < sub.length;i++)
{

vec.addElement(sub[i]);
}
}

private boolean bakFile(String fileName)
{
try
{
//读文件
FileReader raf = new FileReader(sourcepath + fileName);
String detail = "";
BufferedReader buff = new BufferedReader(raf);
String temp = buff.readLine();
while (temp != null)
{
detail += temp + "\n";
temp = buff.readLine();
}
raf.close();
System.out.println(detail);
//写文件
File file = new File(aimpath + fileName);
PrintWriter out = new PrintWriter(new FileWriter(file));
out.print(detail);
out.close();

} catch (FileNotFoundException e)
{
System.out.println("文件没有找到");
} catch (IOException e)
{
System.out.println("copyFile 出错");
}
return true;
}

public static void main(String[] args)
{
CopyFile confile =
new CopyFile("E:\\java\\a", "E:\\JAVABASE\\b");
confile.Filename();
Vector ve = new Vector();
ve = confile.vec;
if (ve != null)
for (int i = 0; i < ve.size(); i++)
{
System.out.println((String) ve.elementAt(i));
confile.bakFile((String) ve.elementAt(i));
}
}
}

在eclipse中运行后总是出现
Exception in thread "main" java.lang.NullPointerException
at CopyFile.Filename(CopyFile.java:31)
at CopyFile.main(CopyFile.java:75)
请高手给与解答~~万分感谢~
最好能够给出解决的方法~
最佳答案
  • 五星知识达人网友:鱼忧
  • 2021-12-24 14:37
Exception in thread "main" java.lang.NullPointerException
意思是:在main线程中出现了 java.lang.NullPointerException异常
NullPointerException就是找不到对象的意思,最有可能出现的原因就是你没有对一个对象进行赋值便开始使用,或者是你把对象的赋值写在了if语句之类的流程控制语句中
你这个程序很明显了
public void Filename()
{
File f = new File(sourcepath);
String sub[] = f.list();
for(int i = 0;i < sub.length;i++)
{

vec.addElement(sub[i]);
}
}
这里出现了一个,原因可能是你没有对sub[i]进行赋值,检查一下程序吧
第二个没看出来,应该也是类似的吧,你并没有对Vector中的元素进行赋值便开始使用了

解决问题首先要知道问题,你给的这点代码只能看出来有毛病,怎么改就难了,解决这个异常容易,达到你要实现的功能就难了
全部回答
  • 1楼网友:怙棘
  • 2021-12-24 15:43
空指针异常 sub[] 的值为null 你E:\java\a 这下面没有文件吧??? 建个文件就不会报错了`
  • 2楼网友:佘樂
  • 2021-12-24 15:31
String sub[] = f.list(); for(int i = 0;i < sub.length;i++) { vec.addElement(sub[i]); } 这段程序有问题,sub[] = f.list();只是把f的头指向了sub,所以第二行的sub.length值为0。vec.addElement(sub[i])自然没执行赋值操作。所以sub永远是空的,报空指针错误。 解决方法:建议你使用 i < f.length 试试 如果这样还不行,你把判断条件换了,不要拿长度来作为判断的条件,换个
  • 3楼网友:梦中风几里
  • 2021-12-24 15:16
你好,出错的原因在这里: public studentinfo[] student = new studentinfo[100]; 上面的数组开辟了100长度,但是每个元素的默认值都是null,仔细想想是不是? 所以解决办法就是: string innerstudent(string id, string yx, string zz, string phone) { studentinfo si = new studentinfo() ; int count = 0; for (int i = 0; i < 100; i++) { if(i == 0 && student[i] == null){ student[i] = si ; }else if (student[i] != null) { count++; }else{ student[count].setid(id); student[count].setyx(yx); student[count].setzz(zz); student[count].setphone(phone); system.out.println("新增成功!"); break ; } } return id; }
  • 4楼网友:怙棘
  • 2021-12-24 15:09
String sub[] = f.list(); sub是null对象
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯