Mit Java eine bestimmte Zeile einer .txt Datei auslesen

Es muss kein zweidim.Array werden.
Die verschiedenen Personen sind die einzige Dim.,
und auf die "Teile" derPerson greifst du (wie im Code sichtbar)
mit Punkt (.id .name...) zu.

Code zum Dateiöffnen etc. muss natürlich rein.
 
Danke für deine Antwort.
Habe das jetzt so gemacht
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.*;


public class array {
	 BufferedReader reader;
	    public int id;
	    public String name;
	    public String beruf;
		int[] array;
	public void main(String[] args){

try{

	reader = new BufferedReader(new FileReader("123.txt"));
         while ((zeile = reader.readLine()) != null) {
             String[] values = zeile.split(";");
             for(int i=0; i< values.length; i++){
             array[i].id = Integer.parseInt(values[0]);
             array[i].name = values[1];
             array[i].beruf = values[2];
         }
         }
        
          
}catch(IOException ioex){}
System.out.println(array[2]);
}
}
es wird mir aber gesagt, dass weder id, noch name, noch beruf gefunden werden kann..
 
Java:
//Das muss eine eigene Klasse sein
class Person {
    public int id;
    public String name;
    public String beruf;
}

/////////////////////////////////////////////////////////////////////////

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.*;

public class Arrayprogramm { //Nicht so nennen wie array innen

	//array ist ein problematischer Name, und es sind doch keine Zahlen...
	Person[] personen;

	public void main(String[] args){
		try{
			personen = new Person[12]; //Muss angelegt werden
			BufferedReader reader = new BufferedReader(new FileReader("123.txt"));
			int i = 0;

			while ((zeile = reader.readLine()) != null && i < 12) {
				String[] values = zeile.split(";");
				personen[i].id = Integer.parseInt(values[0]);
				personen[i].name = values[1];
				personen[i].beruf = values[2];
				i++;
			}
		}catch(IOException ioex) {
			//Leerlassen ist schlecht
		}
	}
}
 
Danke für deine schnelle Antwort...

Das funktioniert bei mir nicht in Eclipse:
1.
fehlt dem die Hauptmethode
2.
wenn ich
Code:
public static void main(String[] args){
eingebe kommen jede Menge andere Fehler.
3. zeile cannot be resolved to a variable

... 1. und 2. hat sich gerade erledigt..
 
Zuletzt bearbeitet:
Zu 1. und 2.
Wenn du noch ein static einfügst bei der main Methode muss das Person[] auch static gemacht werden oder die Deklaration in die Methode verschoben werden. Also beispielsweise so
Java:
public static void main(String[] args) {
        Person[] personen;
        //restlicher code
}
Beim bisherigen Code ist das Personenarray an eine Instanz von Arrayprogramm „gebunden“.

ascawath hat gesagt.:
3. zeile cannot be resolved to a variable
Selber überlegen ;-). Stichwort Deklaration…

Edit: ich brauch zu lange zum Schreiben^^
 
Danke für deine Antwort.
Stimmt, habe ich nicht einmal darüber nachgedacht...
Jetzt hat der aber einen Fehler:
Code:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1|Nachname, Vorname|Designer"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at array.main(array.java:21)
Ich glaube es liegt am "|", muss ich das maskieren?
 
Zuletzt bearbeitet:
Wie sieht dann der Inhalt deiner .txt Datei genau aus?

Was jetzt passiert ist, dass du versuchst den String "1|Nachname, Vorname|Designer" in einen int zu parsen, was nicht geht.
Ich dachte jede Zeile enthält drei Datenfelder und diese sind mittels Semikolon separiert, also so
Code:
1;Hans Muster;Designer
Nun scheinst du allerdings eine Pipe | als Separator zu verwenden. Ändere die Zeile
Java:
String[] values = zeile.split(";");
zu
Java:
String[] values = zeile.split("|");
 
Danke für deine schnelle Antwort.
Die .txt Datei ist folgend aufgabaut:
Code:
01|Mustermann, Max|Designer;
02|Mustermann, Julia|FSJler;
...
Wenn ich die Zeile auf die Pipe umstelle bzw. umschreibe, kommt der gleiche Fehler,
Nur, dass jetzt anstatt
Code:
01|Nachname, Vorname|Designer;
nichts steht...
 
Ah stimmt, die Pipe muss maskiert werden.

Ausserdem muss für jeden Arrayeintrag eine neue Personeninstanz erstellt werden.

Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Arrayprogramm {

    public static void main(String[] args) {
        Person[] personen = new Person[12];
        try {
            BufferedReader reader = new BufferedReader(
                    new FileReader("123.txt"));

            int i = 0;
            String zeile = "";
            while ((zeile = reader.readLine()) != null && i < 12) {
                String[] values = zeile.split("\\|");
                Person person = new Person();
                person.id = Integer.parseInt(values[0]);
                person.name = values[1];
                person.beruf = values[2];
                personen[i] = person;
                i++;
            }
        }
        catch (IOException ioex) {
            // Leerlassen ist schlecht
        }

        for (Person tempPerson : personen) {
            System.out.println(tempPerson);
        }
    }
}

class Person {
    public int    id;
    public String name;
    public String beruf;

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", beruf=" + beruf + "]";
    }

}

Und jetzt hast du an jedem Zeilenende ein Semikolon, das heisst jede Berufsbezeichnung hat auch noch dieses Semikolon am Schluss. Das brauchst du in der Datei nicht.
 
Zuletzt bearbeitet:
Zurück