扫描仪已经执行一次 hasNextLine 后如何重新读取整个文件?

问题描述 投票:0回答:1

扫描仪从头开始重新读取文件内容的最佳方式是什么?由于在 verticesSet 函数中,我使用 while (scanner.hasNextLine()) ,它会读取直到文件中不再有任何值,因为它已经读取了所有值,因此当我调用 EdgeSet 函数时,没有任何反应,因为它尝试从文件中读取值,但“光标”位于最末尾。

我知道可以通过重新打开新扫描仪并将其传递给edgeSet函数来防止这种情况,但这是正确的方法吗?例如,如果我有 10 个其他功能,我可能不想每次都创建一个新的扫描仪。有没有办法让它从文件的开头读取?

public class Test{

    public static void main(String[] args) {
        File fileName = new File("test.txt");
        try {
            Scanner scanner = new Scanner(fileName );
            verticesSet(scanner);
            edgesSet(scanner);
            scanner.close();
        } catch (FileNotFoundException exception) {
            System.err.println("file not found" + exception.getMessage());
        }
    }



public static void verticesSet(Scanner scanner) {
        Set<Integer> verticesSet = new HashSet<>();
        while (scanner.hasNextLine()) {
            verticesSet.add(scanner.nextInt());
        }
        System.out.println(verticesSet);
    }

public static void edgesSet(Scanner scanner) {
        List<String> edges = new ArrayList<>();

        while (scanner.hasNextLine()) {
            edges.add(scanner.nextLine());
        }

        for (int i = 0; i < edges.size(); i++) {
            System.out.println("index" + i + " is" + edges.get(i));
        }
    }
}
java file java.util.scanner
1个回答
0
投票

我的意思是之后你阅读了该文件:

List<Integer> savedValues = null;
try (Scanner s = new Scanner(new File("ints.txt"))) {
    savedValues = s.tokens().
    map(String::trim).
    map(Integer::valueOf).
    toList();
}
© www.soinside.com 2019 - 2024. All rights reserved.