我正在编写一个小的.jar应用程序,它要求用户输入一个字符串并将其写入.txt
文件。我感兴趣的是当输入字符串不是exit
时,程序继续执行以下指令(即写入日期字符串,并将输入字符串写入文本文件)。我的代码不起作用,要求它不记录我输入的第一行,也不记录我输入的第一行exit
。我尝试了很多东西,尝试do-while
循环,但这不起作用。我想知道问题是什么?
try{
String input = scanner();
while(!input.equals("exit")){
String fileLocation = "/Users/loop/Dropbox/goodTrance.txt";
FileWriter writer = new FileWriter(fileLocation,true);
writer.append(returnDate()+": ");
writer.append(input + "\n");
writer.flush();
writer.close();
input = scanner();
}
}catch(Exception e){
e.printStackTrace();
}
编辑:scanner()
是一个返回扫描程序字符串的静态方法。 returnDate()
返回今天的日期。
public static String returnDate(){
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
return dateFormat.format(date).toString();
}
public static String scanner(){
Scanner input = new Scanner(System.in);
String writeSomething = input.nextLine();
return writeSomething;
}
答案 0 :(得分:2)
对scanner()
的电话是做什么的?看起来你每次循环时都会调用它两次,并且可能会丢弃第一个调用(但是检查它)并存储第二个调用而不是检查它。您应该为每个循环仅将称为一次。
注意,您的代码还有其他问题:
scanner()
方法。 nextLine()
。equalsIgnoreCase(...)
检查字符串通常更好。String line = null;
while ("exit".equalsIgnoreCase(line)) {
line = scanner.nextLine();
// etc...
避免NPE
答案 1 :(得分:0)
您是否有发送文本的终端连接?如果是这种情况,终端协议逐个字符地发送,这意味着你不会得到扫描器()。equals(“exit”)为真,因为它只需要一个字符,而不是整个字符串。