使用输入字符串“exit”退出终端中的程序

时间:2013-11-14 21:54:47

标签: java terminal filewriter

我正在编写一个小的.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;
    }

2 个答案:

答案 0 :(得分:2)

scanner()的电话是做什么的?看起来你每次循环时都会调用它两次,并且可能会丢弃第一个调用(但是检查它)并存储第二个调用而不是检查它。您应该为每个循环仅将称为一次

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

  • 不需要scanner()方法。
  • 无需继续重新创建Scanner对象,事实上,通过这样做而不释放资源,您可能会面临资源不足的风险。
  • 而是创建一次扫描程序对象,并在try块中使用它,并根据需要调用nextLine()
  • 还可以考虑在while循环之后关闭文件*,实际上是在try块的finally块中。也可以关闭扫描仪对象
  • 使用equalsIgnoreCase(...)检查字符串通常更好。
  • 检查它是否更安全:

String line = null;
while ("exit".equalsIgnoreCase(line)) {
  line = scanner.nextLine();
  // etc...

避免NPE

答案 1 :(得分:0)

您是否有发送文本的终端连接?如果是这种情况,终端协议逐个字符地发送,这意味着你不会得到扫描器()。equals(“exit”)为真,因为它只需要一个字符,而不是整个字符串。