2012-04-06 13 views
0

Ich habe diese TXT-Datei mit folgendem Format und Inhalt (Anmerkung der Räume nehmen):Wie lese ich ein 2D-Array aus einer .txt-Datei?

Apples 00:00:34 
Jessica 00:01:34 
Cassadee 00:00:20 

Ich mag, dass sie in einen 2D-Array speichern (holder[5][2]) und zugleich gibt sie in eine JTable. Ich weiß bereits, wie man Dateien in Java schreibt und liest und die gelesene Datei in das Array legt. Allerdings, wenn ich diesen Code verwenden:

try { 

     FileInputStream fi = new FileInputStream(file); 
     DataInputStream in = new DataInputStream(fi); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

     String line = null; 
     while((line = br.readLine()) != null){ 
      for(int i = 0; i < holder.length; i++){ 
       for(int j = 0; j < holder[i].length; j++){ 
        holder[i][j] = line; 
       } 
      } 
     } 

     in.close(); 


     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 

Mein holder[][] Array ist nicht sehr gut als JTable ausgibt: | Hilfe bitte? Danke, wer mir helfen kann!

Edit: Ist es auch möglich, dies mit einem Scanner zu tun? Ich verstehe Scanner viel besser.

+0

Sie brauchen nicht 'Datainputstream in = new Datainputstream (fi);'. Verwenden Sie 'FileInputStream' direkt in den' InputStreamReader', der an 'BufferedReader' übergeben wird. –

+0

@ Eng.Fouad Danke für den Tipp. – alicedimarco

Antwort

2

Was Sie brauchen, ist etwas Ähnliches:

int lineCount = 0; 
int wordCount = 0; 
String line = null; 
     while((line = br.readLine()) != null){ 
      String[] word = line.split("\\s+"); 
      for(String segment : word) 
      { 
       holder[lineCount][wordCount++] = segment;      
      } 
      lineCount++; 
      wordCount = 0; //I think now it should work, before I forgot to reset the count. 
     } 

Bitte beachten Sie, dass dieser Code nicht getestet, aber es sollte Ihnen die allgemeine Idee geben.

Bearbeiten: \\s+ ist ein regulärer Ausdruck, der verwendet wird, um ein oder mehrere Leerzeichen Zeichen zu bezeichnen, sei es ein Leerzeichen oder eine Registerkarte. Technisch gesehen ist der Regex einfach \s+ aber wir müssen einen zusätzlichen Platz hinzufügen, da der \ ein Escape-Zeichen Java ist, also musst du es entkommen, also das extra \. Das Plus ist einfach der Operator, der einen oder mehrere von bezeichnet.

Zweite Edit: Ja, Sie können diese auch wie so mit Scanner tun:

Scanner input = new Scanner(new File(...)); 
while ((line = input.next()) != null) {...} 
+0

Was bedeutet das? "\\ s +"? Tut mir leid, ich bin ziemlich neu in Java. – alicedimarco

+0

@taeyeon: Ich habe meine Antwort geändert. Ich hoffe es hilft. – npinti

+1

@Kevin: Ich denke du meinst: Es passt Strings, die aus mindestens einem Leerzeichen bestehen, nicht umgekehrt;) – npinti

Verwandte Themen