如果我的.txt文件为空,如何修复我的扫描仪错误?

时间:2015-05-13 21:08:20

标签: java file

我从文件中获取字符串并将它们放入LinkedList中。当.txt文件中包含数据时,程序正常工作 但是,当.txt文件中没有数据时,它似乎会抛出错误......

    //read in task data and place task data in a LL
            String contentComplete = new Scanner(new File("completeData.txt")).useDelimiter("\\Z").next();
            LineNumberReader  lnr4 = new LineNumberReader(new FileReader(new File("completeData.txt")));
            lnr4.skip(Long.MAX_VALUE);
            lnr4.close();
            realSize = lnr4.getLineNumber();
            sizeOfIn = ((lnr4.getLineNumber() + 1) / 4); //divide by two because every 4 lines is equal to one input
            //-----TEST number of data entries
            System.out.println("Number of data entries from progressData.txt: " + sizeOfIn);
            //-----Number of lines
            System.out.println("Number of lines from progressData: " + realSize);
            //splits userData.txt input 2 parts
            String[] completeContent = contentComplete.split("\n");
            //loads taskData into a LL
            //update: changed i < sizeOfIn to i < realSize and it appears to be loading correctly

            for(int i = 0; i < realSize; i++) {
                task tempTask = new task(completeContent[i], completeContent[i+1], completeContent[i+2], completeContent[i+3]);
                completeLL.add(tempTask);
                i = i + 3;

if / else语句会解决这个问题吗?

这是我正在使用的代码,如果.txt文件有数据,则可以使用。

connect()

1 个答案:

答案 0 :(得分:1)

您没有共享所有代码,但考虑到错误消息,您似乎没有检查扫描程序在请求下一个令牌之前是否仍然在其输入中有一些令牌

为此,您应该使用scanner.hasNext()方法:

  

hasNext()   如果此扫描器的输入中有另一个标记,则返回true。

这样做

while (scanner.hasNext()) {
    // Process here the input from the scanner
    // for example String data = scanner.next();
}

也可能是你不需要在循环中实现它,但只需使用if:

if (scanner.hasNext()) {
   // Process here....
}