2014-10-15 3 views
0

Я обработал этот метод для чтения данных из текстового файла. Я сохраняю все данные, которые я получаю из BufferedReader внутри массива String. Теперь, когда вы хотите прочитать определенные данные, вам необходимо передать номер строки в качестве аргумента для метода. Проблема в том, что я получаю данные из строки 2, но не могу получить данные из строки 1. Я прикрепляю снимок экрана текстового файла, откуда я пытаюсь прочитать данные.Не читает первую строку из текстового файла

public String read(int num) throws IOException{ 
     String readdata; 
     String[] data1=new String[20]; 
     try { 
     FileReader read = new FileReader("E:\\TextFile.txt"); 
     BufferedReader data = new BufferedReader(read); 

     while(data.readLine() != null){ 
      for(int i=0; i<data1.length;i++){ 
       data1[i]=data.readLine(); 
       if(data1[i] == null){ 
       break; 
       }//if 
      }//for 
     }//while 
    }//try 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }//catch 
    finally{ 
     data.close(); 
    }//finally 

    readdata=data1[num]; 
    return readdata; 
    }//read 

This is the Text File

+0

Какая точка внешнего цикла? – ifloop

ответ

0

Вы должны изменить свой while цикл

String str=""; 
while((str=data.readLine()) != null){ // read the line 
    for(int i=0; i<data1.length;i++){ 
     data1[i]=str; // and reuse it 
     if(data1[i] == null){ 
      break; 
      } 
     } 
} 

В чем проблема в коде? вы пропускаете первую строку.

while(data.readLine() != null){ // already reads first line here 
     for(int i=0; i<data1.length;i++){ 
      data1[i]=data.readLine(); // now you are reading from 2nd line 
      if(data1[i] == null){ 
      break; 
      } 
     } 
    } 
2

Вы пропускаете строку:

 while(data.readLine() != null){ // --> reading here 
     for(int i=0; i<data1.length;i++){ 
      data1[i]=data.readLine(); //--> and here 
0

Вы на деле, пропустив первую строку с первым data.readLine() вызовом.

Вы можете упростить цикл, как это:

for (int i = 0; i < data1.length && ((readData = data.readLine()) != null); i++) { 
    data1[i] = readData; 
} 
0

Вы можете попробовать это, чтобы избежать чтений дважды в начале:

String aux = data.readLine(); 
    while(aux != null){ 
    for(int i=0; i<data1.length;i++){ 
     data1[i] = aux; 

Надеется, что это помогает.

Clemencio Morales Lucas.

0

Это может быть поздний ответ, но может быть, это может помочь кому-то.

В соответствии с Выполняемые в вашем коде, вы можете попробовать это в качестве решения:

int i=0; 
while(data.ready()){ 
    data1[i++] = data.readLine(); 
} 

функция готовности() расскажет нам о том, доступен ли поток для чтения. Буферизованный поток символов готов, если буфер не пуст, или если базовый поток символов готов.

Надеюсь, что поможет :)

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