¿Hay alguna manera de hacer que este programa Java sea más interactivo?

He escrito el siguiente programa Java muy simple para pedirle al usuario que ingrese un nombre de archivo, luego informará el número de líneas de este archivo a la salida estándar:

import java.io.*;
import java.util.*;

public class CountLine {

 public static void main(String[] args) 
 {

     //  prompt the user to enter their file name
    System.out.print("Please enter your file name: ");

    //  open up standard input
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      String fileName = null;

      //  read the username from the command-line; need to use try/catch with the
      //  readLine() method
      try {
         fileName = br.readLine();
      } catch (IOException ioe) {
         System.out.println("IO error trying to read your name!");
         System.exit(1);
      }

      System.out.println("Thanks for the file name, " + fileName);



    File file = new File("C:/Users/Will/Desktop/"+fileName);
    Scanner scanner;
    try {
        scanner = new Scanner(file);

    int count =0;
    String currentLine;

    while(scanner.hasNextLine())
    {
        currentLine=scanner.nextLine();
        count++;

    }

    System.out.println("The number of lines in this file is "+count);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("There is no such file");
        e.printStackTrace();
    }
}

}

Está funcionando. Estaría realmente agradecido si los expertos pudieran ayudarme

  1. ver si hay algo que pueda mejorarse en este fragmento de código,
  2. Si no se encuentra el archivo, la excepción se captura en la instrucción catch más externa e imprime el seguimiento de la pila. Sin embargo, creo que no es muy fácil de usar, ¿hay alguna forma de que si el archivo no existe, todo el proceso se reinicie desde el principio?

Gracias por adelantado.

Respuesta 1

Obtenga algo de Estructura en su código:

public static void main(String[] args) 
{
  string output;
  string fname = readFileName();
  if (fileValid(fname)) //Ensure FileExists
  {
     int lineCount = scaneFile(fname);   
     output = "some output text including line numbers"   
  }  
  else
  {
    output = "File Not Valid..."
  }
  //showOutput...
}
Respuesta: 2

El cambio obvio es hacer un método countLines(String filename)que contenga la mayor parte del código actualmente en main (). Obviamente main () llamará a countLines ().

Solicitar un archivo podría vivir en main () u otro método.

Para reiniciar en caso de error, necesita un bucle como:

filename = // read filename from stdin;
while(keepGoing(filename)) { // null check or whatever to let you out of the loop
    try {
         int numLines = countLines(filename);
         println("num lines in " + filename + "=" +numLines);
    }
    catch(Exception ex) { // or just specific excpetions
        ex.printStackTrace();
    }
}
Respuesta: 3

Entonces tengo una URL que es String url = request.getRequestURL () + "?" + Request.getQueryString (); Hay un parámetro Custom = "true", que quiero eliminar antes de almacenarlo en la URL. Hay alguna ...

Tengo esta estructura de cambio / caso: public void onClick (View arg0) {// TODO Interruptor de código de método generado automáticamente (arg0.getId ()) {case R.id.save: if (et.getText ()! = nulo y ...

Tengo el siguiente método que crea bigrams de entrada. Necesito calcular el número de bigrams para calcular la probabilidad de cada ocurrencia. Cadena estática pública sortCountBigrams (ArrayList & ...

Por ejemplo, hay una lista de arrays: 40 8 6 3 7 5 2, y quiero desplazarlos a la izquierda por 2 publicaciones. Y luego la salida esperada es 6 3 7 5 2. He escrito el siguiente código, pero no genera nada Código: ...