2012-04-06 3 views
0

У меня есть этот .txt файл следующего формата и содержания (принять к сведению пробелы):Как читать 2D-массив, как он есть из .txt-файла?

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

Я хочу, чтобы хранить их в 2D массив (holder[5][2]) И в то же время выхода их в JTable. Я уже знаю, как писать и читать файлы в java и помещать считываемый файл в массив. Однако, когда я использую этот код:

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(); 
     } 

Мой holder[][] массив не выводит очень хорошо, как JTable: | Помоги пожалуйста? Спасибо всем, кто может мне помочь!

Редактировать: Также возможно сделать это с помощью Scanner? Я понимаю Сканеры намного лучше.

+0

Вам не нужно 'DataInputStream в = новый DataInputStream (фи)'. Используйте 'FileInputStream' непосредственно в' InputStreamReader', который передается в 'BufferedReader'. –

+0

@ Eng.Fouad Спасибо за подсказку. – alicedimarco

ответ

2

Что вам нужно будет что-то вроде этого:

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. 
     } 

Пожалуйста, обратите внимание, что этот код не тестировался, но это должно дать вам общее представление.

Редактировать: \\s+ - это регулярное выражение, которое используется для обозначения одного или нескольких символов пробела, будь то пространство или вкладка. Технически, регулярное выражение просто \s+, но нам нужно добавить дополнительное пространство, так как \ - это символ escape-кода Java, поэтому вам нужно его избежать, таким образом, дополнительный \. Плюс - это просто оператор, который обозначает или больше.

Второй Edit: Да, вы можете сделать это также с Scanner так:

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

Что это значит? "\\ s +"? Извините, я довольно новичок в Java. – alicedimarco

+0

@taeyeon: Я изменил свой ответ. Надеюсь, поможет. – npinti

+1

@Kevin: Я думаю, вы имеете в виду: он соответствует строкам, состоящим хотя бы из одного символа пробела, а не наоборот;) – npinti

Смежные вопросы