2016-04-03 17 views
3

betrachten ich habe 2 verschiedene KlassenJava lesen mehrere Objekte aus einer Datei

public class A { 

    String name; 
    int A1; 
    int A2; 

} 

und die andere Klasse ist:

public class B { 

    String B0; 
    int B1; 
    int B2; 
} 

und ich habe jetzt eine Datei, die eine ganze Zahl enthält, und mehrere Objekt von A und mehr von B

Die Datei wie

3 
"Jim"; 1;2 
"jef";3;5 
"Peter";6;7 
"aa";1;1 
"bb";2;3 
"cc";3;4 
sein könnte betrachten

können Sie, dass die (am Anfang der Datei) die Anzahl der Objekte in der Klasse A und der Rest sind Objekte aus der Klasse B.

Die Frage ist, wie kann ich lesen und separate alle Objekte aus der Datei?

Das Hauptproblem ist, dass ich nicht weiß, wie ich den ersten int aus der Datei lesen kann. was ich tat, ist

 InputStream inputFileStream = Main.class.getResourceAsStream("/inputFile.txt"); 
ObjectInputStream ois = new ObjectInputStream(inputStream);  
int i = ois.readInt(); 
    ois.close(); 

aber es gibt mir eine Fehlermeldung:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 350A4261 
+0

analysieren Ihre Frage ist eine mehrstufige Frage, und die Schritte umfassen 1) Lesen von Zeilen aus einer Datei, 2 mit Schleifen zum Einlesen der ersten x A-Typen, dann eine while-Schleife zum Lesen der verbleibenden Zeilen 3) Umwandeln jeder Zeile in einen A- oder B-Typ. Also ... wo ** genau ** steckst du fest? Zeige, was du probiert hast. –

+0

@HovercraftFullOfEels Ich habe meine Frage –

Antwort

0

The main problem is that i don't know how can i read the first int from the file.

Sie eine Textdatei zu lesen, nicht eine Datendatei, also nicht readInt() verwenden. Verwenden Sie entweder einen BufferedReader oder meine Empfehlung - ein Scanner-Objekt.

InputStream inputFileStream = Main.class.getResourceAsStream("/inputFile.txt"); 
Scanner scanner = new Scanner(inputFileStream); 
int int = scanner.nextInt(); // get that first int 
scanner.nextLine(); // go to the next line (swallow the end-of-line token) 
//..... 

Dann die gleichen Scanner verwenden Zeilen zu lesen. Verwenden Sie

while (scanner.hasNextLine) { 
    String line = scanner.nextLine(); 
    // here process the line into an A or B depending on the results of a counter variable 
    // then increment the counter here 
} 

Beachten Sie, dass Ihre Verarbeitung wahrscheinlich die split(...) Methode der String wird verwenden aufgeteilt auf ; und erstellen Sie ein Array von String mit den Einzelteilen Sie benötigen. Sie müssen dann die int-bezogenen Elemente über Integer.parseInt(...)

+0

bearbeitet, aber wenn ich zu den Objekten gehe, muss ich wieder mein streaminput ändern. richtig? –

+0

@KamyarParastesh: Heck nein. Verwenden Sie denselben Scanner. Siehe oben Bearbeiten. Sie werden etwas versuchen und sehen, was passiert. –

+0

@KamyarParastesh: Haben Sie weitere Fragen? –