无法写入java txt文件

时间:2015-11-19 09:09:29

标签: java bluej

我目前正在使用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) {

                } 
}

}

1 个答案:

答案 0 :(得分:1)

您的构造函数正在反向分配值。

public ReadWrite(String file, String text)
{
    // initialise instance variables
    file=this.file;
    text=this.text;
}

这是将传入变量filetext分配给实例变量,这些变量为空。

你需要拥有的是:

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;
}

进一步的改进是使实例变量filetext 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;
    }

    // ...
}