# mehrere werte aus datei einlesen und in einzelnen variablen speichern?



## Sidahan (20. November 2010)

Hallo,

nach langer Google-suche sowohl auf Deutsch als auch auf Englisch bleibt mir wohl nichts mehr übrig als die Frage hier zu stellen.
Ich würde gerne aus einer Datei, in der mehrere Werte gespeichert sind (sagen wir mal durch Zeilenumbrüche getrennt), ebendiese Werte auslesen und in jeweils einer variable speichern; danach mit diesen weitere operationen durchführen und am ende wieder etwas in die datei schreiben.
Wie ich etwas in eine Datei schreibe weis ich bereits; das Problem ergibt sich beim auslesen.
Es gibt zwar hunderte Beispiele wie man den Inhalt einer Datei auslesen und sich via Konsole ausgeben lassen kann, doch damit ist mir leider nicht geholfen, da ich die Informationen/Werte ja zunächst innerhalb des Programms weiterverarbeiten möchte.
Alle meine Versuche, mir auch nur eine Zeile als "brauchbare" Variable ausgeben zu lassen sind gescheitert 
Wenn mir also jemand weiterhelfen kann wäre ich sehr dankbar!
P.S.: nachdem ich mich erst seit kurzem mit Java beschäftige bitte ich darum, allzu theoretische vorschläge lieber wegzulassen, ich bin im moment schon verwirrt genug^^
MfG Sidahan


----------



## Akeshihiro (20. November 2010)

Eigentlich ist das eine ziemlich simple Sache, vielleicht hast du es nur in keinem Beispiel richtig verstanden, es wurde nicht explizit darauf eingegangen oder einfach nur doof erklärt. Aber wie auch immer, ich habe für dich einfach mal schnell was zusammengekraxelt. Hoffe es hilft dir weiter. Eigentlich sollten die Kommentare alles sagen, ansonsten einfach nachfragen.

Es sei dazu gesagt, dass das nur ein exemplarisches Beispiel ist, das heißt, dass der Code nur zur Veranschaulichung ist und deshalb nicht sauber programmiert ist, z.B. ist fast die gesammte Logik in der main-Methode, was so nicht sein sollte.

Naja, hier jedenfalls der Code:

```
package de.tutorials.forum.hilfe.sidahan.datei.wertespeichern;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.LinkedList;

public class WerteSpeichernSample {
	/**
	 * Programmstartpunkt und in diesem Fall fast die gesammte Programmlogik
	 * (sollte im Normalfall nicht so sein).
	 * 
	 * @param args
	 *            Kommandozeilen-Parameter.
	 */
	public static void main(String[] args) {
		// Datei-Reader initialisieren
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(new File("C:/test.txt")));
		} catch(FileNotFoundException e) {
			// Falls es ein Problem beim Erzeugen des Readers gab ...
			e.printStackTrace();
			System.err.println("Fehler beim Öffnen der Datei!");
			return;
		}

		// Ab hier kann mit dem Datei-Reader gearbeitet werden
		/*
		 * Hier werden wir eine Datei einlesen und ihren Inhalt Zeile für Zeile
		 * einlesen und jede Zeile in einer Liste speichern, um mit ihnen später
		 * weiterarbeiten zu können.
		 */
		LinkedList<String> rows = new LinkedList<String>();
		try {
			for(String tmp = null; (tmp = reader.readLine()) != null;) {
				rows.add(tmp);
			}
		} catch(IOException e) {
			// Falls einen Fehler beim Einlesen gab ...
			e.printStackTrace();
			close(reader);
			return;
		}

		// Den Datei-Reader wieder sauber schließen
		close(reader);

		/*
		 * Nun haben wir alle Zeilen in einer Liste gespeichert und können auf
		 * diese zugreifen. In diesem Beispiel sind in jeder Zeile einfach nur
		 * Zahlen eingetragen, also werden wir diese auch in solche parsen und
		 * mit ihnen rechnen.
		 */
		int sum = 0;
		for(String row : rows) {
			int number = 0;
			try {
				number = Integer.parseInt(row);
			} catch(NumberFormatException e) {
				// Falls eine Zeile nicht nur eine Zahl beinhaltet ...
				e.printStackTrace();
				System.err.println("Fehler: Eine Zeile hat ein fehlerhaftes Format!");

				// Das Programm deswegen nicht beenden, einfach die Zeile
				// überspringen/ignorieren
				continue;
			}
			sum += number;
		}

		/*
		 * Und zum Schluss werden jetzt einfach alle Zeilen und das Ergebnis
		 * ausgegeben.
		 */
		System.out.println("Alle Zeilen:");
		for(String row : rows) {
			System.out.println(row);
		}
		System.out.println("\nDie Summe aller Zahlen: " + sum);
	}

	/**
	 * Methode zum Schließen eines Readers.
	 * 
	 * @param r
	 *            Der zu schlißende Reader.
	 */
	private static void close(Reader r) {
		try {
			r.close();
		} catch(IOException e) {
			// Falls es einen Fehler beim Schließen gab ...
			e.printStackTrace();
			System.err.println("Fehler beim Schließen des Readers!");
		}
	}
}
```
Der Dateiinhalt:


> 25
> 30
> 70
> 1
> ...


Ausgabe:


> Alle Zeilen:
> 25
> 30
> 70
> ...


----------



## Sidahan (20. November 2010)

Vielen Dank!
Habe mir deinenn code in ein test-*.java kopiert und mit einer eigenen .txt gefüttert.
danach noch code eingefügt, der meiner meinung nach aus der erstellten Liste ("rows") an einer bestimmten stelle den wert abfragt und ausgibt - und es hat geklappt  
Du hast mir über eine große schlucht geholfen, nochmal danke dafür - das bringt mich einen großen schritt weiter in richtung der erfolgreichen umsetzung meiner programmidee!
MfG Sidahan


----------

