扫描仪从头开始重新读取文件内容的最佳方式是什么?由于在 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));
}
}
}
我的意思是之后你阅读了该文件:
List<Integer> savedValues = null;
try (Scanner s = new Scanner(new File("ints.txt"))) {
savedValues = s.tokens().
map(String::trim).
map(Integer::valueOf).
toList();
}