Поиск конца файла в Java

#java #file

Вопрос:

У меня есть метод, который просматривает файл, чтобы найти количество строк.

 static int findFileSize(Scanner f){
        System.out.println("Got to counter:");
        String str;
        int line_count = 0;
        while(f.hasNextLine()) {
            line_count  ;System.out.println(line_count);
            //str = f.nextLine();
        }System.out.println("File size: "   line_count);
        return line_count;
    }//end findFileSize 
 

Когда я не включаю str = f.nextLine();, я вижу, что он индексируется бесконечно. Что заставляет это происходить? И есть ли способ найти количество строк в файле .txt без необходимости ненужного хранения данных в строке?

Ответ №1:

Что заставляет это происходить?

Вы ничего не читаете из Scanner , вы просто спрашиваете, сможете ли вы что-нибудь прочитать.

Если вы зайдете в магазин и спросите, есть ли у них, скажем, морковь, если ответ «да», но вы не покупаете морковь, в магазине все еще есть морковь. Поэтому, если вы выйдете и войдете, чтобы спросить еще раз, у них все равно будет морковь, поэтому они снова ответят «да» (если только их не купил кто-то другой).

Вы должны «купить морковь» с помощью f.nextLine() .

без необходимости ненужного хранения данных в строке?

Вам не нужно хранить его в переменной:

 f.nextLine();
 

прочитает строку и немедленно отбросит ее. Но на самом деле нет большой разницы между этим и сохранением в переменной: переменная в любом случае сохраняет только содержимое последней прочитанной строки. (Но поскольку вы не указываете str начальное значение, оно определенно не назначается после цикла, поэтому вы в любом случае не можете прочитать его значение после цикла).