¿Por qué obtengo un bucle infinito?

Acabo de hacer un programa que se supone que escanea un archivo y cuenta el número de líneas, vocales y muchas otras cosas, pero cuando lo ejecuto, entra en un bucle infinito. Estoy bastante seguro de que tiene que ver con los métodos .hasNext()y con los .hasNextLine()que no estoy muy familiarizado

import java.util.*;
import java.io.*;
/**
 *
 *
 */
public class Wordcount1 {


    public static void main(String[] args) {
        int vowels=0;
        int punctuation=0;
        int sentences=0;
        int words=0;
        int lines=0;
        int alphaNumeric=0;

       try{
       Scanner input = new Scanner(System.in);
       System.out.println("Enter file name: ");

       File file = new File(input.nextLine());
       Scanner fileReader = new Scanner(file);

       while(fileReader.hasNextLine()){
           lines +=1;
       }
       while(fileReader.hasNext()){
           { fileReader.next();
           words +=1;
           }
           String word = fileReader.next();
           for (int i=0; i<word.length();i++){
               char ch= word.charAt(i);
               if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')
                   vowels +=1;
               if((ch=='!'||ch=='.'||ch=='?'))
                   sentences +=1;
               if(Character.isLetterOrDigit(ch))
                   alphaNumeric +=1;
               switch(ch){
                   case ',':
                    punctuation +=1;
                    break;
                   case '[':
                    punctuation +=1;
                    break;
                   case ']':
                    punctuation +=1;
                    break;
                   case ':':
                    punctuation +=1;
                    break;
                   case '`':
                    punctuation +=1;
                    break;
                   case '-':
                    punctuation +=1;
                    break;
                   case '!':
                    punctuation +=1;
                    break;
                   case '_': 
                    punctuation +=1;
                    break;
                   case '(':
                    punctuation +=1;
                    break;
                   case ')':
                    punctuation +=1;
                    break;
                   case '.':
                    punctuation +=1;
                    break;
                   case '?':
                    punctuation +=1;
                    break;
                   case '"':
                    punctuation +=1;
                    break;
                   case ';':
                    punctuation +=1;
                    break;

               }

           }
       }
        System.out.println("The number of words in the file name: " + words);
        System.out.println("The number of lines in the file name: " + lines);
        System.out.println("The number of alphanumeric characters: "
                + "in the file name: " + alphaNumeric);
        System.out.println("The number of sentences in the file name: "
                + sentences);
        System.out.println("The number of vowels in the file name: " + vowels);
        System.out.println("The number of punctuations in the file name: " 
                + punctuation);

       }catch(FileNotFoundException e){
           e.printStackTrace();
       }
    }
}
Respuesta 1
while(fileReader.hasNextLine()){
    lines +=1;
}

Aquí, repetidamente le preguntas al archivo "¿tienes más líneas", pero en realidad nunca consumes ninguna línea. Entonces, sigue respondiendo "sí, tengo más líneas".

Respuesta: 2

En Linux, desde la línea de comandos, estoy ejecutando un script ant para construir un proyecto java. Yo uso JasperReports en el ejercicio. Pero mi pregunta es general. Me sale un error de compilación: paquete net.sf ...

¿Cómo puedo analizar este JSON incorrecto (creo) usando la biblioteca Gson? {...... "teléfonos": {"155193": "5556739386", "155194": "5555301828"} ......} ...

Aquí, estoy tratando de pasar el argumento lambda a la invocación local de un método que acepta el argumento lambda: package Desktop; import java.util.function. *; clase pública MyClass {public static <...

Primero tengo dos objetos creados así ... Receta receta Uno = nueva Receta ("Pizza de Pepperoni"); Ingrediente uno = nuevo ingrediente ("Masa", 1, UnitOfMeasurement.valueOf ("Libras")); Ingrediente dos ...