Как решить бесконечный readLine в то время как - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть программа, и я использую один из методов для подсчета строк, которые есть в файле .txt, и возврата целочисленного значения.Проблема в том, что когда я его выполняю, несмотря на то, что я написал, что если моя строка == нуль, то время должно прекратиться, а время продолжает идти, игнорируя нули, которые он получает бесконечно.

Я не знаю, что попробоватьчтобы решить его.

private int sizeOfFile (File txt) {
    FileReader input = null;
    BufferedReader count = null;
    int result = 0;
    try {

        input = new FileReader(txt);
        count = new BufferedReader(input);

        while(count != null){
        String line = count.readLine();
            System.out.println(line);
        result++;
        }

    } catch (FileNotFoundException ex) {
       ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        try {
            input.close();
            count.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


    return result;
}

Он должен остановиться, когда обнаружит ноль, что означает, что больше нет строк, но он продолжает идти.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

count ваш BufferedReader, ваш цикл должен быть на line!Например,

String line = "";
while (line != null) {
    line = count.readLine();

Кроме того, вы должны использовать try-with-Resources до close ваших ресурсов (вместо блока finally).И вы могли бы написать этот цикл while более идиоматически.Мол,

private int sizeOfFile(File txt) {
    int result = 0;
    try (BufferedReader count = new BufferedReader(new FileReader(txt))) {
        String line;
        while ((line = count.readLine()) != null) {
            System.out.println(line);
            result++;
        }
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return result;
}
0 голосов
/ 30 декабря 2018

Когда вы создаете экземпляр BuffereReader, присваиваете ему count, count всегда будет ненулевым и, следовательно, будет удовлетворять циклу while:

count = new BufferedReader(input); //count is holding an instance of BufferedReader.

while(count != null){ //here count is non-null and while loop is infinite and program never exits.

Вместо этого используйте следующий код, гдекаждая строка будет прочитана и проверена, является ли она нулевой, если ноль, то программа завершит работу.:

input = new FileReader(txt);
count = new BufferedReader(input);
String line = null;
while(( line = count.readLine())!= null){ //each line is read and assigned to the String line variable.
        System.out.println(line);
        result++;
 }

Если вы используете JDK-1.8, вы можете сократить свой код, используя Files API:

int result = 0;
try (Stream<String> stream = Files.lines(Paths.get(txt.getAbsolutePath()))) {
      //either print the lines or take the count.
      //stream.forEach(System.out::println); 
      result = (int)stream.count(); 
} catch (IOException e) {
      e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...