我对这个程序的意图是创建一个简单的程序,逐行接收来自终端的输入,并以相同的方式将其存储到文件中,当用户输入“end”时结束。
我很困惑为什么...... 1)当用户输入“结束”时,while循环不会结束 2)数据没有写入文件(我已经检查过,它不是出于任何原因)
编辑:答案已经找到了!对于那些刚到的人,我的条件应该是!temp.equals(“end”)
public static void main(String[] args) throws IOException{
Scanner in = new Scanner(System.in);
System.out.println("Type in data and it will be written to a file");
System.out.println("filename = blah.txt");
String temp, filename="blah.txt";
PrintWriter outfile = new PrintWriter(new FileWriter(filename));
System.out.println("enter next line... \"end\" to exit");
temp=in.nextLine();
while(temp!="end"){
outfile.println(temp);
System.out.println("enter next line... \"end\" to exit");
temp=in.nextLine();
}
outfile.close();
}
答案 0 :(得分:2)
使用equals
代替
temp!="end" // temp.equals("end")
在关闭之前刷新输出流,因为默认情况下创建的PrintWriter对象没有自动行刷新。因此
outfile.flush()
或者当您创建PrintWriter对象时,请将true作为第二个参数传递,如此
PrintWriter outfile = new PrintWriter(new FileWriter(filename), true);
答案 1 :(得分:0)
检查2个字符串是否相等时使用equals方法,即temp.equals("end")
这就是你的while循环没有结束的原因
答案 2 :(得分:0)
while循环不会结束,因为您要将引用类型相互比较,而不是String
的值。这意味着,
while( temp != "end" )
检查String
中存储的temp
的引用是否等于"end"
的引用。因此,比较看起来有点像
java.lang.String@549f9afb != java.lang.String@583dad65
始终评估为true
。
为了比较两个String
个对象的值,您需要在一个equals
上调用String
。所以在你的情况下,必须写:
while ( temp.equals( "end" ) )
PrintWriter
不会立即写入收到的输出,而是将其存储直到刷新为止。通过激活autoFlush
,每次调用println
后都会刷新PrintWriter。可以激活它来设置构造函数的autoFlush
参数。
PrintWriter outfile =
new PrintWriter( new FileWriter( filename ), true );