Auslesen von .csv Datein in ein Klassen Array

oOCubeOo

Mitglied
Hallo,

ich habe eine .csv Datei, dort hab ich die Werte "Vorname, Nachname, Benutzername, Passwort, Punkte" gespeichert.

Beispiel:

Hans Jürgen HaJü 12n34 25
Dieter Musterman DiMu 43n21 77

Diese möchte ich nun in einlesen. Bis jetzt sieht das dann so aus.
[Hans,Jürgen;HaJü;12n34;25]

Ich möchte diese aber gerne in das Klassen-Array einfügen(Ich weiß nicht genau ob es Klasse-Array heißt).
Hier die Klasse:

Java:
public class User
{
    public String vorname;
    public String nachname;
    public String benutzername;
    public String passwort;    
    public int punkte;
    public User(String pVorname,String pNachname,String pBenutzername,String pPasswort, int pPunkte)
    {
        vorname=pVorname;
        nachname=pNachname;
        benutzername=pBenutzername;
        passwort=pPasswort;
        punkte=pPunkte;
    }
}

So kann man manuel einen Benutzer einfügen:

Java:
public class AddUser
{
    User newUser[] = new User[1];
    public AddUser()
    {
        newUser[0] = new User("Hans","Jürgen","HaJü","12n34",25);
    }
}
{

Aber wie kann ich jz die Daten aus der .csv Datein in das Array newUser[] einfügen, es muss nicht zwingend eine .csv datei sein, es kann auch .txt oder sonst was sein.

Danke schonmal im vorraus! 🙂
 
BufferedReader und String
Code:
.split(hierDeinTrennzeichen);
verwenden

Zeilenweise einlesen, input in tokens aufsplitten und deinem Userobjekt zuweisen.

angenommen deine Datei ist folgendermaßen angelegt

Java:
#Name | Nachname | Punktestand
Martin ; Müller ; 354485

ignorierst du beim einlesen z.B die erste Zeile mit .
Code:
startsWith("#");

und liest die folgenden Zeilen dann aus und splittest mit
Code:
.split();
jeweils bei
Code:
;
 
Zuletzt bearbeitet:
Hi,

ein Array ist hier wahrscheinlich die falsche Wahl, außer du willst nur eine bestimmte Anzahl an User Objekten laden.
In einer Liste kannst du beliebig viele User Objekte speichern und bist nicht auf eine bestimmte Größe gebunden.

Hier mal ein Vorschlag:

Java:
public class UserModel {

	private final List<User> users = new ArrayList<User>();

	public void addUser(final User user) {
		users.add(user);
	}

	public List<User> getUsers() {
		return users;
	}

	public User getUser(final int index) {
		return users.get(index);
	}
}

Hier noch ein Beispiel zum Einlesen der CSV Datei:

Java:
      public UserModel read(String filepath) {
		final UserModel userModel = new UserModel();
		BufferedReader br = null;
		String line = "";
		try {

			br = new BufferedReader(new FileReader(filepath));
			while ((line = br.readLine()) != null) {
				final String[] tokens = line.split(";");
				final String vorname = tokens[0];
				final String nachname = tokens[1];
				final String benutzername = tokens[2];
				final String passwort = tokens[3];
				final String punkte = tokens[4];
				userModel.addUser(new User(vorname, nachname, benutzername,
						passwort, punkte));
			}
		} catch (final FileNotFoundException e) {
			e.printStackTrace();
		} catch (final IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (final IOException e) {
					e.printStackTrace();
				}
			}
		}
		return userModel;
	}
 
Zuerst mal danke für deine Antwort,
aber mit BufferedReader und Split arbeite ich bereits. Ich schaffe es nicht, das eingelesene in meinem Array einzufügen. In ein einfaches Array hab ich dies bereits schon geschafft.
Gibt es eine Möglichkeit wie z.b. newUser[0].vorname = A 1, newUser[0].nachname = B 1, etc ?
Oder gibt es was leichteres?
Jedes TextField dieser csv datei soll einzeln ausgelesen werden.

Falls ich dich falsch verstanden habe, würde ich dich gerne um einen kleinen Beispielcode bitten 😀
 
Ja, an eine List hatte ich auch shcon gedacht, aber ich fand es persönlich leichter, die Logindaten mit einem array zu vergleichen. Aber ich versuch mich mal an einer List 😀 Danke!
 
Klasseneigenschaften werden normalerweise mit Setter und Getter verändert bzw. ausgelesen.

Du kannst das natürlich auch mit einem Array machen. Deine Klasse User muss dann aber auch die Setter und Getter bereitstellen.

In deinem Fall sind die Klassenvariablen alle Public und somit kannst du die Werte auch mit direkt mit newUser[0].vorname verändern. Aufgrund der Sichtbarkeit sollte das aber vermieden werden.
 
Danke für eure Hilfe,

ich hab es dann jetzt irgendwie geschafft! 😀

Java:
public class LoadUser
{
        AddUser adduser = new AddUser();
        public int numberOfUser = 0;
        public void readCSVTime() {
            try {
                java.io.BufferedReader FileReader=                      //ein Reader um die Datei Zeilenweise auszulesen
                    new java.io.BufferedReader(
                        new java.io.FileReader(
                            new java.io.File("test.csv")
                        )
                    );            
                String zeile="";           
                while(null!=(zeile=FileReader.readLine())){         
                    String[] split=zeile.split(";");               
                    System.out.println(split[0]);
                    adduser.newUser[numberOfUser] = new User(split[0],split[1],split[2],split[3],Integer.parseInt(split[4]));
                    numberOfUser += 1;
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public void test()
        {
            for(int i = 0; i < numberOfUser; i++){
                System.out.println(
                adduser.newUser[i].vorname + " "+ 
                adduser.newUser[i].nachname + " "+ 
                adduser.newUser[i].benutzername + " "+ 
                adduser.newUser[i].passwort + " "+ 
                adduser.newUser[i].punkte
                );
            }
        }
    }

Habt ihr noch i-was zu verbessern? dann her damit 😛
 

Zurück
Oben