# Datei öffnen / auslesen / editieren in JAVA (extrem Wichtig!)



## Kian_the_klingon (25. Juni 2004)

Also,
geschafft habe ich es schon eine Datei zu schreiben, dass roblem liegt beim auslesen!
Wie kann man in einer Line der Datei die ersten Bytes bzw. Zeichen ausblenden oder in den Stringbuffer schieben ohne das man die Stringlänge kennt. Bei JAVA war die einzig nützliche Funktion die ich gefunden hab' skip() und readLine(), die helfen mir aber auch nicht weiter.

In der Datei steht z.B.:

yyyyyyyyy  12345

Jetzt will ich die "y" nicht einlesen sondern nur die Zahl(en).

Ich bin im Grunde C++ Progger und muss nun was in JAVA hinbekommen.
Das es in JAVA so schwer wird ne einfache Datei ein und Ausgabe zu schreiben hab ich net erwartet.

Zum Vergleich der C++ Code (falls jemand nicht so genau weiss was gemeint ist!):


```
int zahl;

char stringbuffer[100];

		FILE* pfile;

	if((pfile = fopen("Datei.ini","r")) == NULL)
		MessageBox("Datei konnte nicht gefunden werden",            "Warnung",MB_OK);

	fscanf(pfile,"%s", stringbuffer);
	fscanf(pfile,"%d", &zahl);

	fclose(pfile);
```

Ich hoffe das irgendjemand mir helfen kann!


----------



## Thomas Darimont (25. Juni 2004)

Hallo!

Versuchs mal hiermit:


```
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/*
 * Created on 25.06.2004
 *
 */

/**
 * @author Administrator
 * 25.06.2004
 **/
public class FileReaderExample {

	public static void main(String[] args) {

		try {

			//Möglichkeit 1

			FileReader fr = new FileReader("c:/Test.txt");

			int skipChar = 'y';

			int c;
//read() gibt bei EOF -1 zurück ...
			while ((c = fr.read()) != -1) {
				if (c == skipChar)
					continue;

				System.out.print((char)c);
			}

			fr.close();

			System.out.println("++++++++++++++++++");

			// Besser wäre aber IMHO Möglichkeit 2

			fr = new FileReader("c:/Test.txt");

			BufferedReader br = new BufferedReader(fr);

			String line;

			while ((line = br.readLine()) != null) {
				System.out.println(line.replaceAll("y", ""));
			}

			br.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
```

Mein Test.txt File:


```
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyABDERDJKLj1234
yyyyureiwuoriweu32783489734289
y199
```

Gruß Tom


----------



## Kian_the_klingon (26. Juni 2004)

Danke, aber das hatte ich nicht gemeint, die Reihe "y"s sollte nur als Beispiel dienen, ich wollte wissen wie ich es schaffe einen String auszublenden oder zu überspringen ohne dass ich weiss aus welchen Zeichen der String besteht und wieviele es davon gibt.
Denn so eine Stringkette besteht aus verschiedenen Buchstaben.

z.B.:

Hallo 34

jetzt will ich das "Hallo" rausnehmen, so dass ich die "34" einlesen kann.
Ich weiss aber nicht wieviele und welche Buchstaben dieses "Hallo" besitzt, ich weiss nur, dass es vor der Zahl eine Reihe von Zeichen gibt, und diese will ich ausblenden, so dass ich an die Zahl kann.


----------



## Thomas Darimont (26. Juni 2004)

Hallo!

Hast du nun in deiner Textdatei immer ein jeder Zeile eine Zahl stehen?
Vor dieser Zahl steht dann eine beliebige Anzahl von Zeichen und dahinter steht nichts mehr? Kannst du immer davon ausgehen, dass vor dieser Zahl nur "Nichtziffern" Zeichen  stehen?

Dann würde das hier passen:

(Test.txt hat den selben Inhalt wie zuvor)


```
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * Created on 26.06.2004
 */

/**
 * @author Administrator
 */
public class FileReaderExample {

	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("c:/test.txt");
			int i;

			while ((i = fr.read()) != -1) {
				if (i == (int) '\n')
					System.out.println();
				// Wenn das eingelesene Zeichen keine Zahl darstellt ... lies
				// nächstes zeichen
				if (!Character.isDigit((char) i))
					continue;
				System.out.print((char) i);
			}

			fr.close();

			BufferedReader br = new BufferedReader(
					new FileReader("c:/test.txt"));

			System.out.println("++++++++++++++++++++++++++++++++++++++");

			String line;

			//Mit diesem regex besorgen wir uns einfach den Teil des Strings
			// der die Zahl darstellt
			// (Danke an Reima, Weasel und Tim) ;-)
			Pattern pattern = Pattern.compile("^\\D*(\\d*)$");

			while ((line = br.readLine()) != null) {
				Matcher matcher = pattern.matcher(line);
				if (matcher.matches())
					System.out.println(matcher.group(1));
			}

			br.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
```

HTH

Gruß Tom


----------



## Kian_the_klingon (26. Juni 2004)

Danke ich werd' es mal ausprobieren!


----------



## Juerjen (1. Juli 2004)

*immer Leerzeichen zwischen Buchstaben und Zahlen?*

Hallo,

in deinen Beispielen ist es immer so, dass zwischen deinen Buchstaben und den nachher wichtigen Zahlen ein Leerzeichen steht. Wenn das immer so ist, kannst du zeilenweise auslesen und die Strings dann mit der Klasse StringTokenizer trennen.

Mehr Info zum StringTokenizer findest du hier:

http://www.galileocomputing.de/openbook/javainsel/java-04.htm#Xxx782082


Viel Erfolg,
Juerjen


----------



## Kian_the_klingon (1. Juli 2004)

Danke für den Tipp aber das Thema hat sich erledigt, der Code funktioniert Einwandfrei, danke  an alle die mir geholfen haben!


----------

