我目前正在使用blueJ来学习java,我有一个作业,我必须写一个txt文件,检查文件是否存在并读取文件。我的代码在下面编译但是当我尝试运行write()方法时,我收到了以下错误java.lang.nullpointerexception;
我不知道我哪里出错了,现在开始让我疯狂。
import java.io.*;
public class ReadWrite
{
// instance variables - replace the example below with your own
private String file;
private String text;
/**
* Constructor for objects of class ReadWrite
*/
public ReadWrite(String file, String text)
{
// initialise instance variables
file=this.file;
text=this.text;
}
public void write()
{
try{
FileWriter writer = new FileWriter(file);
writer.write(text);
writer.write('\n');
writer.close();
}
catch(IOException e)
{
System.out.print(e);
}
}
public boolean writeToFile()
{
boolean ok;
try{
FileWriter writer = new FileWriter(file);
{
write();
}
ok=true;
}
catch(IOException e) {
ok=false;
}
return ok;
}
public void read(String fileToRead)
{
try {
BufferedReader reader = new BufferedReader(new FileReader(fileToRead));
String line = reader.readLine();
while(line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close();
}
catch(FileNotFoundException e) {
}
catch(IOException e) {
}
}
}
答案 0 :(得分:1)
您的构造函数正在反向分配值。
public ReadWrite(String file, String text)
{
// initialise instance variables
file=this.file;
text=this.text;
}
这是将传入变量file
和text
分配给实例变量,这些变量为空。
你需要拥有的是:
public ReadWrite(String file, String text)
{
// initialise instance variables
this.file = file;
this.text = text;
}
将来避免这种情况的有效方法是制作参数final
- 这意味着您无法为它们分配任何内容,并且您将在编译器中捕获它。
public ReadWrite(final String file, final String text)
{
// won't compile!
file = this.file;
text = this.text;
}
进一步的改进是使实例变量file
和text
final
,这意味着他们有被分配。这样,您就可以使用编译器来帮助您捕获错误。
public class ReadWrite
{
private final String file;
private final String text;
public ReadWrite(final String file,
final String text)
{
this.file = file;
this.text = text;
}
// ...
}