1

我有一个从文本文件中读取的扫描仪。当它到达文件中的某一行时,我希望能够调用一个使用 Scanner 作为当前状态参数的方法 - 例如,我希望将扫描仪(连同使用的文件一起)传递给到底在哪一行。

public static void createEntry(File list, int mediaTypeNum, String mediaType) throws FileNotFoundException {
    Scanner mediaReader = new Scanner(list);
    int occurrence = mediaTypeNum;
    int scannerCounter = 0;
    String match;
    String title = "";
    String director = "";
    while (mediaReader.hasNext() && scannerCounter < occurrence) {
        match = mediaReader.nextLine();
        if (match.equalsIgnoreCase(mediaType)) {
            scannerCounter++;
            if (scannerCounter == occurrence) {
                // based on type, create the media object
                // createMediaObject(list, mediaReader, mediaType)
                title = mediaReader.nextLine();
                director = mediaReader.nextLine();
            }
        }
    }

createMediaObject() 将有一个 switch case,并且根据 case,Scanner 将读取以下几行,直到出现空行。对于每种媒体类型,行数不同。

先感谢您!

4

2 回答 2

6

当然,它实际上适用于 Java 中的任何对象。在任何时候都不会创建对象的隐式副本。*

你需要注意的是它Scanner有一个“顺序”状态,如果你经常传递它,很容易忘记它处于什么状态。特别是如果执行条件处理,不同的执行路径最终可能会将其留在不同的位置。

解决此问题的一个好方法是始终在方法 JavadocScanner中记录预期处于什么状态以及最后剩下的状态。

*该声明有一个很大的警告:多线程。但是在这里详细讨论这个话题是非常偏离主题的。

于 2013-01-18T22:20:14.063 回答
2

当然。您将引用传递给 Scanner 对象,以便接收者看到相同的实例和相同的状态。

于 2013-01-18T22:20:24.243 回答