使用多个扫描程序逐行读取文件,导致noSuchElementException

时间:2015-09-22 23:09:56

标签: java java.util.scanner

我不确定收到没有这样的元素异常。扫描仪没有正确读取我的文件似乎是一个问题,但我不知道我哪里出错了。

我正在读取文件,然后使用扫描仪逐行扫描。但是当我尝试这样做时,我得到了不寻常的行为,例如缺少行或文件未发现的异常。

    public static void readMylifeLikeABook(String fileName,int maxItems) {
        // Read file line by line with different elements on each line
        int bookCount=0;
        int movieCount = 0;
        Book [] bookItem =new Book[maxItems];
        Movie [] movieItem =new Movie[maxItems];

        try {
            File file = new File(fileName);
            Scanner scanner = new Scanner(file);
            Scanner line;
            while (scanner.hasNext() && ((bookCount+movieCount)<maxItems)) {
                line = new Scanner(scanner.nextLine()); // scan next line
                if (line.next().contains("Movie")){
                    movieItem[movieCount]= new Movie();
                    movieItem[movieCount].setMediaType("Movie");
                    movieItem[movieCount].setTitle(scanner.nextLine());
                    movieItem[movieCount].setRef(scanner.nextLine());
                    movieItem[movieCount].setPrice(Double.valueOf(scanner.nextLine()));
                    movieItem[movieCount].setDirector(scanner.nextLine());
                    movieItem[movieCount].setActor(scanner.nextLine());
                    System.out.println(movieItem[movieCount].getTitle());
                    movieCount++;
                    line.close();                           // close line
                }
                else if (scanner.next().contains("Book")){
                    bookItem[bookCount]= new Book();
                    bookItem[bookCount].setMediaType("Book");
                    bookItem[bookCount].setTitle(scanner.nextLine());
                    bookItem[bookCount].setRef(scanner.nextLine());
                    bookItem[bookCount].setPrice(Double.valueOf(scanner.nextLine()));
                    bookItem[bookCount].setAuthor(scanner.nextLine());
                    System.out.println(bookItem[bookCount].getTitle());
                    bookCount++;
                    line.close();                           // close line
                }
            }
            scanner.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

        //System.out.println(count);
        for (int i=0;i<(bookCount+movieCount);i++) {
            System.out.println(bookItem[i] +"\n\n "+ movieItem[i]);
        }
    }

2 个答案:

答案 0 :(得分:0)

嗯,是否可以提供正在阅读的文件?这很可能是该文件的一个问题,就好像Scanner对象没有要读取的后续行,它将引发异常。确保文件具有所需的行数。

答案 1 :(得分:0)

您在构建line.next()后立即致电line。你需要这样做吗?如果是这样,也许您需要先致电hasNext()以确保其中有令牌。

(如果没有令牌,我非常确定line.next()会抛出NoSuchElementException。)

另外,请根据文件格式检查代码。文件中是否有空行?