# Kann ich mit einem Scanner eine Datei mehrmals lesen?



## JWK (2. Dez 2020)

Hallo.
Ich würde gerne mit meinem Scanner eine Datei lesen.
Jedoch soll er das mehrmals tuen.

Ich habe scanner.remove(); benutzt, da ich nicht wusste was dieser Befehl bedeuten. Weiß ich auch immer noch nicht.
Aber es hat nicht Funktioniert.
Im Internet habe ich nix zu diesem Thema gefunden.
Deshalb meine Frage:
Mit welchem Befehl kann ich meinem Scanner sagen, wie ich die Datei mehrmals auslesen kann.
Es muss nicht unbedingt ein Scanner sein, es könnte auch BufferedReader sein.
Hauptsache mein Problem wir gelöst.


----------



## mrBrown (2. Dez 2020)

JWK hat gesagt.:


> Ich habe scanner.remove(); benutzt, da ich nicht wusste was dieser Befehl bedeuten.


Weiß du, was `format C:` macht? 



JWK hat gesagt.:


> Weiß ich auch immer noch nicht.


https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#remove():


> The remove operation is not supported by this implementation of Iterator.





JWK hat gesagt.:


> Mit welchem Befehl kann ich meinem Scanner sagen, wie ich die Datei mehrmals auslesen kann.
> Es muss nicht unbedingt ein Scanner sein, es könnte auch BufferedReader sein.


Am einfachsten: die Datei einfach mehrfach öffnen.

Was genau willst du denn rereichen, wofür die Datei mehrmals gelesen werden muss?


----------



## JWK (2. Dez 2020)

Ich weiß nicht ganz genau was du mit: "Datei mehrfach öffnen" meinst.

Ich bin relativ neu in JAVA und habe also wenig Erfahrung.
Um mich ein wenig in Java zu üben habe ich eine Website besucht die sich Advent of Code nennt.
Dort war die erste Aufgabe, aus einer Datei mit verschieden Zahlen, die heraus zu suchen, die gemeinsam 2020 ergeben.
Mein Code: 


```
import java.io.*;
import java.util.Scanner;

public class Main {
int x;
int y;
int lö;
int schrittx;
    int schritty;
static int anz=0;
    static Scanner scx;



    public static FileInputStream file;
    public Main(){


        if (scx.hasNext()){
            schrittx++;
            x=scx.nextInt();


            while(scx.hasNext()){
                anz++;
                y=scx.nextInt();

                if(x+y==2020){
                    System.out.println("Lösung: "+x*y);
                    new Main();
                }if(anz==186){
                    new Main(),
                }
            }
        }
    }
    public static void main(String[] args){
        try {
            file=new FileInputStream("C:\\Users\\Test\\IdeaProjects\\Programming Advent\\src\\ordner/zahlen.txt");
            scx = new Scanner(file);
            scy = new Scanner(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        new Main();
    }


}
```

Es könnte sein, dass ich unnötige Variablen undso habe.
Bitte Ignorieren.

Ich muss meinem Scanner also sagen können, in welcher Zeile er anfangen soll zu lesen.


----------



## White_Fox (2. Dez 2020)

Wenn die Datei jetzt nicht gerade so groß ist daß sie den RAM ernsthaft füllt, würde ich sie einfach einmal einlesen und die Daten anderweitig halten. Z.B. in einer Collection. Eine Datei mehrmals hintereinander zu öffnen nur um sie auszulesen klingt etwas merkwürdig.


----------

