高手,您好:
我是一名学习软件工程的学生,现在,我正在“面壁修炼”,Java SE和io流,已经学习了快有半年的时间了,知识点已经掌握了,但是,没有做过太多的工程项目来巩固提高我的对于io流中的知识点的理解..
最近,我开始通过实验,锻炼我对于Java的io部分的知识的理解与提高.并且锻炼我目前还没有经验的“调试运行时错误的能力”.
我在D盘中建立了一个文件,如下:
我是一名学习软件工程的学生,现在,我正在“面壁修炼”,Java SE和io流,已经学习了快有半年的时间了,知识点已经掌握了,但是,没有做过太多的工程项目来巩固提高我的对于io流中的知识点的理解..
最近,我开始通过实验,锻炼我对于Java的io部分的知识的理解与提高.并且锻炼我目前还没有经验的“调试运行时错误的能力”.
我在D盘中建立了一个文件,如下:
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出
只有在实例对象的时候才会调用构造器。
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。
if (file.exists() && file.isFile()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
String text;
while ((text = input.readLine()) != null)
txt.setText(txt.getText() + text + "\n");
} catch (IOException ioException) {
System.err.println("File Error!");
}
}
这个也许可以帮到你
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
构造器中的代码没有执行,main函数中的代码改成new Test5(). start();
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;
public Test5() {
// TODO Auto-generated constructor stub try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
写的这个程序太乱,按照常规的思路和编写方式来写吧。
// RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
// BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt"));
// DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
// PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));
//设置文本内容
String str="writer in text";
byte[] b=(str).getBytes();
//写入文件,还可以用其他方法如:write(String str)
bw.write(b,0,b.length);
bw.close();
// pw.write(str);
// pw.close();
} catch (IOException ex) {
System.out.println(ex);
}
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧