Java程序将“null”放在文本文件中而不是我的字符串

时间:2017-06-15 19:36:54

标签: java file null

编辑:我明白现在的问题是什么。我正在创建一个类的新实例,它重置了它内部变量的值。对于任何想知道你可以使用'static'来表示变量值在整个类的所有实例中保持不变的人 示例:public static int example = 10;

我正在尝试将字符串添加到文本文件中,但是当我添加字符串时,它会在文件中放入“null”而不是我的字符串。字符串是“listName”

我的值设置为字符串的类:

public class NewList {

private String listName;

public void newList() {

    System.out.println("NEW LIST");
    System.out.print("List Name: ");

    @SuppressWarnings("resource")
    Scanner scanner = new Scanner(System.in);
    setListName(scanner.next());

    System.out.println(listName);

    ListsWriter listsWriterObject = new ListsWriter();
    listsWriterObject.listsWriter();
}

public String getListName() {
    return listName;
}

public void setListName(String listName) {
    this.listName = listName;
}

将字符串添加到文本文件的类:

public class ListsWriter {

public void listsWriter() {
    NewList newListObject = new NewList();
    File lists = new File("lists.txt");

    try{
        PrintWriter pw = new PrintWriter(new FileWriter(lists, true));
        pw.append(newListObject.getListName() + "\n");
        pw.close();
    }catch(IOException ex){
            ex.printStackTrace();
    }
}

}

2 个答案:

答案 0 :(得分:1)

好!所以我修改了你可以使用它的代码:) NewList.java

public class NewList {

private String listName;

public void newList() {
    System.out.println("NEW LIST");
    System.out.print("List Name: ");

    @SuppressWarnings("resource")
    Scanner scanner = new Scanner(System.in);
    listName = scanner.next();

    System.out.println(listName);

    ListsWriter listsWriterObject = new ListsWriter();
    listsWriterObject.listsWriter(listName);
}

public static void main(String[] args) {
        new NewList().newList();
}
}

ListsWriter.java

public class ListsWriter {

public void listsWriter(String listName) {
    File lists = new File("lists.txt");

    try{
        PrintWriter pw = new PrintWriter(new FileWriter(lists, true));
        pw.append(listName + "\n");
        pw.close();
    }catch(IOException ex){
            ex.printStackTrace();
    }
}

}

答案 1 :(得分:1)

查看代码执行的顺序。您从private String listName;内容开始,并将名称保存在变量NewList中。此变量属于您当前所在类NewList的实例。请务必注意,如果您创建listName的其他实例,则它们都将拥有自己的ListsWriter个变量。

接下来,您创建newListObject.getListName()并调用其方法。在那里,您尝试使用NewList newListObject = new NewList();阅读列表名称,但之前使用的是NewList。这将创建listName新实例。它有自己的null变量,它与另一个实例的变量不同!因此它是ListsWriter

如果您需要其他实例的名称,则需要将值或对此实例的引用传递给ListsWriter对象。

您可以使用String的构造函数来执行此操作,该构造函数接受NewList作为参数(或对listsWriter对象的引用)。或者您将参数添加到方法public void listsWriter(String listName) {

例如: include