2015-02-21 2 views
1

Я использую библиотеку Java OpenCSV для чтения и записи нового файла. Требование состоит в том, чтобы написать символ @ в конце каждой строки, кроме последней. Мне удалось добавить @ после каждой строки, но последняя строка не должна содержать @. Часть моей программы Java выглядит следующим образом:Как выполнить 2 В то время как циклы, содержащие одно и то же условие в Java?

// A part of my Java code 
String[] endOfLine; 
String[] nextLine; 
int endLine = 0; 
int lineNumber = 0; 

// To get how many line are in the input file 
while ((endOfLine = reader.readNext()) != null) { 
    endLine++; 
} 

//For 8 lines endLine is 8 here - which is ok 
//Now I want to pass this in next while loop - which is also ok 

while ((nextLine = reader.readNext()) != null) { 
    lineNumber++; 
    channel_temp = nextLine[5]; 

    if (lineNumber == endLine) { 

     //Build a new string with all our required data 
     String newdata = channel_temp; 
     writer.writeNext(newdata); 
     System.out.println(newdata); 
    } 

    else { 

     String newdata2 = channel_temp + "@"; 
     writer.writeNext(newdata2); 
     System.out.println(newdata2); 
    } 
} 

System.out.println("lineNumber: " + lineNumber); 
System.out.println("endLine: " + endLine); 

Программа показывает результат, как:

lineNumber: 0 
endLine: 8 

Итак, почему мой while loop не обновляя LINENUMBER значение? В какой части я ошибаюсь?

ответ

2

Необходимо снова инициализировать reader. После первого цикла он находится в конце файла. Поэтому во втором цикле reader.readNext() возвращает значение null и поэтому никогда не входит во второй цикл.

+0

Спасибо за ваш ответ. Я понял проблему. Повторное открытие файла не было бы хорошей идеей, но как повторно инициализировать читатель до второго цикла? –

+1

Я не думаю, что есть способ повторно инициализировать читателя без повторного открытия файла. Я не хочу, чтобы снова открыть файл, наиболее эффективным и, вероятно, лучшим способом было бы слить до двух циклов. – Roan

+0

@NazmulHossain Roan является правильным. –

0

В вашем первом цикле while вы читаете весь файл. В вашем втором цикле while вы пытаетесь использовать один и тот же читатель для повторного чтения того же файла, за исключением того, что этот читатель уже находится в конце файла, поэтому ваш вызов nextLine() возвращает null. Поэтому моя ставка заключается в том, что второй цикл while не выполняется.

Чтобы решить эту проблему, вы можете либо сделать все за один цикл, либо снова открыть файл для второго цикла.

Я надеюсь, что это помогает :)

0

Проблема заключается в том, что используется тот же читатель, чтобы выполнить второе время цикла.

Рассмотрите возможность повторного инициализации считывателя. Затем второй цикл будет начинаться с самого начала.