使用文件输入运行Java程序

时间:2010-03-13 00:02:21

标签: java file user-input java.util.scanner

我正在编写一个程序,它从文件中读取输入,然后将其打印到屏幕上。当我在没有从文件中获取输入的情况下运行它时,它完全正常。但是,每次我尝试从文件中运行它时,它都会给我一个“线程异常”主“java.util.NoSuchElementException:找不到行”错误发生在每个输入被认为要读取的位置。我不知道发生了什么。

此程序假设从用户获取输入,创建Photo对象,然后将信息打印到屏幕。当我手动输入信息但是当我尝试使用java PhotoTest时,一切运行正常。 test.dat获取文件的输入,它会给出以下错误消息:
线程“main”中的异常java.util.NoSuchElementException:找不到行
  at java.util.Scanner.nextLine(Scanner.java:1516)
  在PhotoTest.readPhoto(PhotoTest.java:31)
  在PhotoTest.main(PhotoTest.java:74)

我输入的代码:

private static Photo readPhoto(Scanner scanner) throws ParseException
{
    Date dateTaken;

    Scanner scan = new Scanner(System.in);

    String subject = scan.nextLine();
    subject = subject.trim();

    String location = scan.nextLine();
    location = location.trim();

    String date = scan.nextLine();
    date = date.trim();
        if (date.equals("")){ //if the date is empty it is set to null
            dateTaken = null;
            }
        else { //if a date is entered, it is then parsed
            DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
            dateTaken = df.parse(date);
            }

    String file = scan.nextLine();
    file = file.trim();
    File photoFile = new File(file);

    //creates a Photo object from the information entered
    Photo Photo = new Photo(subject, location, dateTaken, photoFile);

    return Photo;
}

public static void main(String[] args) throws ParseException
{
    boolean endprogram = false;
    Scanner scan = new Scanner(System.in);

    //creates  a loop so that the user may enter as many photos as they wish
    while (!endprogram)
    {
        System.out.println("Would you like to enter a photo (y/n)?");

        //if the input is anything other than y, the program ends
        if(!scan.next().equalsIgnoreCase("y"))
        {
            endprogram = true;
        }
        else 
        {
            System.out.println(readPhoto(scan));
        }

    }
}

2 个答案:

答案 0 :(得分:3)

  

当我手动输入信息但当我尝试使用java PhotoTest < test.dat获取[sic?]文件的输入时,一切正常[...]

test.dat是否也包含"y"次确认?管道传输stdin的文件时,该文件的内容必须采用合法格式,就像手动输入一样。


此外,您正在为Scanner创建另一个stdin实例,即使其中一个已传递给readPhoto。你确定需要这样做吗?

答案 1 :(得分:0)

在你的文件中,你需要在最后一行回车。这相当于您手动输入的内容。请注意,在输入时,请在最后一行按Enter键。