在请求输入时,在Java中忽略了nextLine

时间:2013-05-18 23:23:48

标签: java file-io

下面你会看到一些我遇到问题的代码。基本思想是将一个现有文本文件简单复制到新文本文件,但如果存在新文本文件,则会给出三个选项。其他开关盒完美无瑕地工作,但这第三个也是最后一个案例根本无法完成!

基本上这是一个选择,如果先前选择的文件名已经存在,你可以选择一个新的文件名,但是当你选择3时你只需要打印出“键入一个新名字:”并立即执行跳到FileNotFoundException捕获,完全绕过应该允许用户输入新名称的代码,但我不明白为什么。有什么建议吗?

            System.out.println("Type a new name:");                 
            String retryName = keyboard.nextLine();                                     
            try
            {
                outputStream = new PrintWriter(retryName);
            }
            catch (FileNotFoundException e)
            {
                System.out.println("Error creating file " + retryName + "!");
                System.out.println("The program will now close.");
                System.exit(0);
            }
            while (inputStream.hasNextLine())
            {
                outputStream.println(inputStream.nextLine());                       
            }

2 个答案:

答案 0 :(得分:4)

在try / catch之前查看retryName; retryName包含什么?我敢打赌,它包含一个你不会捕获的新行作为代码的一部分,让用户可以在代码中选择前面的选项。

答案 1 :(得分:4)

正如Ahmed建议的那样,你可能正在使用诸如nextnextInt之类的方法,然后在调用nextLine之前忘记丢弃行终止符。

尝试将其作为解决方法:

keyboard.nextLine(); // discard the line break 
String retryName = keyboard.nextLine();