Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序放;空";在文本文件中而不是我的字符串中_Java_File_Null - Fatal编程技术网

Java程序放;空";在文本文件中而不是我的字符串中

Java程序放;空";在文本文件中而不是我的字符串中,java,file,null,Java,File,Null,编辑:我理解现在的问题是什么。我正在创建一个新的类实例,它重置了类中变量的值。对于任何想知道可以使用“static”作为变量值的人,在类的所有实例中保持不变 示例:公共静态int示例=10 我试图将字符串添加到文本文件中,但是当我添加字符串时,它会在文件中放置“null”,而不是我的字符串。字符串是“listName” 类,其中my a值设置为字符串: public class NewList { private String listName; public void newList()

编辑:我理解现在的问题是什么。我正在创建一个新的类实例,它重置了类中变量的值。对于任何想知道可以使用“static”作为变量值的人,在类的所有实例中保持不变 示例:
公共静态int示例=10

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

类,其中my a值设置为字符串:

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

}好的!所以我修改了您的代码,您可以使用它:) 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();
    }
}

}

看看代码的执行顺序。从
扫描器
开始,将名称保存在变量
私有字符串列表名称中。此变量属于您当前所在的类
NewList
的实例。需要注意的是,如果您创建了
NewList
的其他实例,那么它们都将有自己的
listName
变量

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

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

您可以通过使用
ListsWriter
的构造函数来实现这一点,该构造函数接受
String
作为参数(或对
NewList
对象的引用)。或者将参数添加到方法
listsWriter

例如:
public void listsWriter(String listName){

您刚刚创建了
newListObject
,您想知道为什么字段
listName
为空?!?如果您想要非空值,您不认为需要先调用
setListName()
不是构造函数,而是您从未调用过的方法。我们知道它不是构造函数,因为:(1)它指定了返回类型-here
void
,(2)它与包含它的类没有相同的名称,Java是区分大小写的,因此
NewList
!=
NewList
在构造后调用该方法。不要错误地将所有业务逻辑都放在构造函数中。其他人似乎相信您认为方法
NewList()
是一个构造函数,在执行
newnewlist()时自动调用
。我无法让自己相信这一点,因为该方法会提示输入
列表名称:
,如果您认为该方法是一个构造函数,为什么没有这样的提示不会自动告诉您该方法没有被执行?很抱歉,这似乎不符合逻辑。如果您希望文件中的名称来自提示,那么nd运行的代码并没有提示您,为什么您对文件中的名称为空感到惊讶???我并没有试图将其设置为构造函数。我对java有点陌生,所以我真的不知道该怎么做才能解决这个问题。谢谢!我想我理解为什么它以前不起作用,这已经解决了它。