Liste aus Objekten erstellen

Isika

Grünschnabel
Ich habe folgendes Problem:
Ich habe eine Datei (.txt) mit einer Menge Daten eingelesen welche so aufgebaut ist:
#
BMW
250
4
65400
13456
#
Porsche
400
2
125600
4893
...
diese Datei habe ich in eine arrayList eingelesen und zwar so
Java:
    public ArrayList read() throws java.io.FileNotFoundException,
            java.io.IOException {
        FileReader fr = new FileReader(this.getFileName());
        BufferedReader br = new BufferedReader(fr);
        ArrayList aList = new ArrayList(this.getBufferSize());
 
        String line = null;
        while ((line = br.readLine()) != null) {
            aList.add(line);
        }
 
        br.close();
        fr.close();
        return aList;
    }

ich würde jetzt gerne daraus eine Liste aus einzelnen Objekten machen.
So, dass die Objekte dann so aufgebaut sind

Java:
public class Auto {
 
    private String marke;
    private int ps;
    private int sitze;
    private int neuPreis;
    private int kmStand;
}

Ist dies in der Form wie ich es mir vorstelle möglich?
Wenn ja kann ich das regeln dass bei jedem "#" ein neues Objekt erstellt wird und dann mit den dazugehörigen Werten in die neue Liste gespeichert wird?

Wäre es evtl. besser wenn man die Datei direkt in die gewünschte form bringt?
Stelle mir das grob so vor
Java:
if (line.startsWith("#")){
    zeile ++;
    //hier irgendwie neues Objekt erstellen und Variablen zuordnen und in die Liste packen
    }
 
gut ... ich wollte es eigentlich schon unter deinen andere thread *der übrigens das selbe thema behandelt > bitte keine multi-threads übers selbe problem eröffnen* schreiben ... aber diesmal schreib ichs drunter

bring deine TXT-files *das format is übrigens für solche aufgaben echt schlecht gewählt* einfach ins INI-format ... google nach "java ini" ... such dir n ini-parser raus und fertig is ...
alternativ würd ich sowas mit CSV machen *ums noch relativ einfach zu halten*
natürlich gehts auch komplizierter mit SQLite oder ner richtigen datenbank ... aber ich glaube das ist noch zu hoch für dich *mal abgesehen von connectoren und casts und der gleichen*

noch n vorschlag
über n temp-objekt erstmal von einem '#' bis zum nächsten '#' alles in einen string *mit trennzeichen* schreiben und dann aus diesem in ner zweiten methode die neuen objekte erzeugen ... also halt als art custom-parser ...
du könntest auch vom BufferedReader *bzw drunterliegendem DataInputStream* weg gehen und mit nem dierektem InputStream die daten einzulesen und dann mit nem großen byte-array zu arbeiten ... wäre zwar komplizierter ... du würdest das rad neu erfinden ... und wäre auch totaler schwachsinn ... aber es wäre ne möglichkeit ...
 
ob .ini-Format oder nicht ist völlig egal!

@Isika:
Kannst du dich darauf verlassen, dass der Code diesem Schema folgt und für jedes Auto 5 Zeilen hat?
Wenn ja, könntest du einen LineNumberReader verwenden und die Zeilen einzeln auslesen:
Wenn eine Zeile "#" enthält, erzeugst du das Objekt
Die nächste Zeile wird als Name eingelesen: Auto.setName(lnr.readLine());
Die nächste Zeile als Leistung (PS): Auto.setPS(Integer.parseInt(lnr.readLine()));
und so weiter...

Ich würde die Daten aber nicht in eine ArrayList speichern, bevor du sie verarbeitest, sondern stattdessen direkt aus der Datei beim Lesen verarbeiten, dafür ist der LineNumberReader da!
 
@genodeftest
uh .. den LineNumberReader kannte ich noch garnicht ...
werd mir das mal reinziehen ... vllt hilft es mir ja auch bei einigen meiner probleme ...
von desshalb n DANKE für diesen tipp
 
Zurück