Java 使用输入字符串";退出“;退出终端中的程序

Java 使用输入字符串";退出“;退出终端中的程序,java,terminal,filewriter,Java,Terminal,Filewriter,我正在编写一个小的.jar应用程序,它向用户请求一个字符串并将其写入.txt文件。我感兴趣的是,当输入字符串不是exit时,程序继续执行以下指令(即,写入日期字符串,并将输入字符串写入文本文件)。我的代码对此不起作用,请询问,它不会记录我输入的第一行,也不会记录我输入的第一个exitI。我尝试了很多方法,尝试了一个do-while循环,但没有成功。我想知道是什么问题 try{ String input = scanner(); while(!inp

我正在编写一个小的.jar应用程序,它向用户请求一个字符串并将其写入
.txt
文件。我感兴趣的是,当输入字符串不是
exit
时,程序继续执行以下指令(即,写入日期字符串,并将输入字符串写入文本文件)。我的代码对此不起作用,请询问,它不会记录我输入的第一行,也不会记录我输入的第一个
exit
I。我尝试了很多方法,尝试了一个
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()
是一个返回扫描字符串的静态方法<代码>返回日期()返回今天的日期

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

调用
scanner()
有什么作用?它看起来像是每次循环都要调用它两次,并且可能会丢弃第一个调用(但检查它),存储第二个调用而不检查它。我认为每个循环只应该调用一次

注意,您的代码还有其他问题:

  • 无需使用
    scanner()
    方法
  • 不需要不断地重新创建Scanner对象,事实上,这样做而不释放资源,您就有资源耗尽的风险
  • 相反,只需创建一次Scanner对象,并在try块中使用它,根据需要对其调用
    nextLine()
  • 也考虑在while循环之后关闭文件,实际上是在您的尝试块的最后一个块中。同时关闭扫描仪对象
  • 通常最好使用
    equalsIgnoreCase(…)
    检查字符串
  • 这样检查更安全:


为了避免NPE

您是否有发送文本的终端连接?如果是这种情况,终端协议将逐个字符发送,这意味着您将永远无法将scanner().equals(“exit”)设置为true,因为它只需要一个字符而不是整个字符串。

请显示您的
scanner()
方法。什么是scanner?A会有帮助的。谢谢气垫船。我犯了一个非常业余的错误。我声明了两次——难怪。我声明了
stringinput=scanner()在while循环之外,并且
input=scanner()在循环的
结束之前。谢谢@绿卷心菜:参见编辑。您的代码中还有其他新手问题。我将我的更改放在上面。怎么样?
最后{System.exit(0);}
这就是你的意思吗?
String line = null;
while ("exit".equalsIgnoreCase(line)) {
  line = scanner.nextLine();
  // etc...