2016-05-18 8 views
-5

Ich habe eine Datei mit 90 Objekten, jedes Objekt hat 20 Attribute. Jede Zeile der Datei hat 1 Objekt, also muss ich eine Zeile lesen und alle diese 20 Attribute trennen, so dass ich alle benötigten Informationen in ein Objekt füllen und dieses Objekt in ein Array von Objekten einfügen kann.Wie lese ich eine Datei und lege sie in ein Array von Objekten?

Ich habe eine Frage hier auf SO gefunden, die etwas Ähnliches getan hat, aber sie hatten nur ein Attribut pro Zeile, also mussten sie nur eine Zeile lesen und diese Zeile in jedes Attribut einfügen, mein Problem ist, dass ich 20 Attribute in einer Zeile habe , wie kann ich sie trennen?

EDIT 1:

Vielen Dank für alle, die jetzt geholfen, aber ich zu einem anderen Problem. mein Code ist folgende:

public void loadGang(){ 
    String currentline; 
    Gang g =new Gang(); 
    String[] result= new String[50]; 
    BufferedReader info; 
    try { 
     info = new BufferedReader(new FileReader("Gangs.txt")); 
     for(int i=0;i<90;i++){ 
      currentline= info.readLine(); 
      result=currentline.split(" "); 
      g.setName(result[0]); 
      g.setHire(Integer.parseInt(result[1])); 
      g.setUpkeep(Integer.parseInt(result[2])); 
      g.setCombat(Integer.parseInt(result[3])); 
      g.setDefense(Integer.parseInt(result[4])); 
      g.setTechlevel(Integer.parseInt(result[5])); 
      g.setStealth(Integer.parseInt(result[6])); 
      g.setDetect(Integer.parseInt(result[7])); 
      g.setChaos(Integer.parseInt(result[8])); 
      g.setControl(Integer.parseInt(result[9])); 
      g.setHeal(Integer.parseInt(result[10])); 
      g.setInfluence(Integer.parseInt(result[11])); 
      g.setResearch(Integer.parseInt(result[12])); 
      g.setStrenght(Integer.parseInt(result[13])); 
      g.setBlade(Integer.parseInt(result[14])); 
      g.setRange(Integer.parseInt(result[15])); 
      g.setFighting(Integer.parseInt(result[16])); 
      g.setMarts(Integer.parseInt(result[17])); 
      listgang.add(g); 
      System.out.println(listgang.get(i).getName()); 
     } 
     info.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


} 

Ich habe "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 bei Game.loadGang (Game.java:30)" So funktioniert dies für 7 Zeilen der Textdatei, aber es hört auf, ich denke, es gibt ein Problem mit der "currentline = info.readLine();" Teil, weil ich versucht habe, einen Druck dort zu setzen, also kann ich sehen, ob das funktionierte, aber als es zu dieser Linie kam, hat es keine Ausgabe so gemacht, vielleicht ist das Problem dort? Es sollte ein Problem eines Arrays außerhalb der Grenzen sein, aber ich kann nicht sehen, wo, irgendwelche Ideas?

EDIT 2: Ich denke, es gibt ein Problem in der Datei oder etwas, weil ich versuchte zu überprüfen, ob der Split passiert, indem Sie die Länge der Ergebnisse überprüfen, und ich sehe, dass in dieser Zeile die Ausgabe 1 war, so etwas passiert diese Linie ...

EDIT 3: Ich tat es! Es gab eine leere Zeile oder etwas in der Datei, die ich nicht im Editor sehen konnte, aber ich öffnete die .txt-Datei das WordPad und ich löschte gerade diese Zeile und jetzt funktioniert es gut.

+0

Was hast du bisher gemacht? Kannst du ein paar Beispiele geben? Bitte stellen Sie spezifischere Fragen. – Turing85

+0

Hey Mann, du weißt was zu tun ist. Dies ist jedoch nicht der richtige Ort für Code-Anfragen. –

+0

Wenn ich wüsste, was ich tun würde, würde ich nicht fragen, da das eine Verschwendung von Zeit ist ... Ich habe diesen Beitrag http://stackoverflow.com/questions/23145416/creating-objects-via-txt-file-into überprüft -an-array-in-java, und ich muss etwas ähnliches tun, aber er hat ein Attribut pro Zeile und ich habe alle meine Attribute in einer Zeile, ich brauche nur jemanden, der mir eine Methode oder etwas sagt, das ich trennen muss wenn ich die Info lese. Oder sollte ich nur eine ganze Zeile zu einem String lesen und dann Sachen aus dem String zu den Attributen nehmen, die ich brauche? Es tut mir leid, wenn ich mich nicht gut erkläre, aber ich weiß nicht viel über Java noch – I3ryI3e

Antwort

0

Mein Rat an Sie wäre, einen benutzerdefinierten Objektleser zu erstellen. Der benutzerdefinierte Objektleser liest das Objekt ein und trennt die Daten des Objekts in eine Datenstruktur (Array usw.). Das Objekt könnte diese Struktur möglicherweise zurückgeben. Sie können diesen Objektleser einmal für jede Zeile verwenden. Wenn die Datenstruktur nach jedem gelesenen Objekt zurückgegeben wird, können Sie damit machen, was Sie wollen. Sie können diese Idee natürlich übernehmen und nach Ihren Wünschen modifizieren. Wenn Sie diese Antwort mögen, akzeptieren Sie sie.

+0

Wenn Sie über das Erstellen eines benutzerdefinierten Objekt-Lesegeräts sprechen, sprechen Sie davon, eine Methode zu erstellen, die eine ganze Zeile in eine Zeichenkette einliest und diese Zeile dann in jede Information teilt, die ich brauche, oder? – I3ryI3e

+0

Es könnte sein, dass wenn Sie wollen. Du hast gesagt, dass jede Linie ein Objekt ist, also meine ich eine Methode, die ein Objekt aufnimmt. Aber wenn Sie eine Textzeile haben, die aufgeteilt werden muss, dann können Sie eine Zeile lesen und sie in der Methode aufteilen. – jillian

+0

Können Sie mir mit dem Problem helfen, das ich jetzt habe? – I3ryI3e

Verwandte Themen