2011-06-09 13 views
11

La mayoría de los ejemplos que hay en la web para la entrada de un archivo en Java referirse a una ruta fija:usuario de archivo de entrada de consola/línea de comandos - Java

File file = new File("myfile.txt");

¿Qué hay de un archivo de entrada del usuario desde la consola? Digamos que quiero que el usuario introduzca un archivo:

System.out.println("Enter a file to read: ");

Qué opciones tengo (usando la menor cantidad posible de código) para leer en un archivo especificado por el usuario para su procesamiento. Una vez que tenga el archivo, puedo convertirlo a cadena, etc. ... estoy pensando que tiene que ver con BufferedReader, Scanner, FileInputStream, DataInputStream, etc. No estoy seguro de cómo usarlos en conjunto con obtener el método más eficiente.

Soy un principiante, por lo que podría estar perdiendo algo fácil. Pero he estado jugando con esto por un tiempo ahora en vano.

Gracias de antemano.

Respuesta

18

Para que el usuario introduzca un nombre de archivo, hay varias posibilidades:

como argumento de línea de comandos.

public static void main(String[] args) { 
    if (0 < args.length) { 
    String filename = args[0]; 
    File file = new File(filename); 
    } 
} 

Al pedir al usuario que escriba en:

Scanner scanner = new Scanner(System.in); 
System.out.print("Enter a file name: "); 
System.out.flush(); 
String filename = scanner.nextLine(); 
File file = new File(filename); 
+0

no creo que necesita para limpiar en este caso: http://stackoverflow.com/questions/7166328/when-why -to-call-system-out-flush-in-java –

+0

@HunterS: Esa otra pregunta menciona algunos casos en los que el 'flush' no es necesario. El código anterior no es uno de ellos, por lo tanto, decidí que sería mejor ser explícito al respecto. De acuerdo con el [PrintStream] (http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#write (int)) Javadoc es necesario en este caso, ya que la cadena hace no contiene un caracter '\ n'. –

1

Utilice un java.io.BufferedReader

String readLine = ""; 
try { 
     BufferedReader br = new BufferedReader(new FileReader(<the filename>)); 
     while ((readLine = br.readLine()) != null) { 
     System.out.println(readLine); 
     } // end while 
    } // end try 
    catch (IOException e) { 
     System.err.println("Error Happened: " + e); 
    } 

y llenar el bucle while con el procesamiento de datos.

Saludos, Stéphane

Cuestiones relacionadas