2011-03-30 17 views
32

No estoy seguro de cómo debe leer desde la entrada del sistema desde un archivo Java.Lectura desde System.in - Java

Quiero ser capaz de llamar a java myProg < file

donde archivo es lo que quiero para ser leído en forma de cadena y dado a MYPROG en el método principal.

¿Alguna sugerencia?

+0

¿Cuál es el problema exactamente? 1) no sabe cómo iniciar un programa java con un argumento 2) no sabe cómo abrir un archivo dentro de un programa java que tiene el nombre del archivo como argumento del método principal. o 3) ambos – Fortega

+2

@Fortega ninguno de esos. Él quiere canalizar un archivo en lugar de la entrada del sistema. – corsiKa

+1

@Peter a veces leer 68 millones de páginas es un poco demasiado! – corsiKa

Respuesta

50

Puede utilizar System.in para leer desde la entrada estándar. Funciona igual que ingresarlo desde un teclado. El sistema operativo maneja pasar de archivo a entrada estándar. :-)

class myProg { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Printing the file passed in:"); 
     while(sc.hasNextLine()) System.out.println(sc.nextLine()); 
    } 
} 
+0

no se olvide de importar java.util.Scanner – shieldgenerator7

+0

también, la documentación del escáner: https://docs.oracle .com/javase/7/docs/api/java/util/Scanner.html – shieldgenerator7

4

Uso System.in, es un InputStream que acaba sirve para este propósito

16

Bueno, usted puede leer System.in en sí, ya que es una válida InputStream. O también se puede envolver en una BufferedReader:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
+1

Envolver en un BufferedReader parece una mala idea porque en Linux (quizás no en todas las configuraciones) hace que tu programa no obtenga los datos después de que escribes algo en el terminal/PuTTy y presiona "Enter". Para que el programa obtenga lo que ha escrito, debe enviar un carácter especial para enjuagar la transmisión. –

4

Se podría leer de System.in al igual que lo haría para la entrada del teclado utilizando, por ejemplo, o InputStreamReaderScanner.

1

Puede llamar java myProg arg1 arg2 ...:

public static void main (String args[]) { 
    BufferedReader in = new BufferedReader(new FileReader(args[0])); 
} 
-5
class myFileReaderThatStarts with arguments 
{ 

class MissingArgumentException extends Exception{  
     MissingArgumentException(String s) 
    { 
    super(s); 
    } 

    }  
public static void main(String[] args) throws MissingArgumentException 
{ 
//You can test args array for value 
if(args.length>0) 
{ 
    // do something with args[0] 
} 
else 
{ 
// default in a path 
// or 
    throw new MissingArgumentException("You need to start this program with a path"); 
} 
} 
-4

Usted probablemente en busca de algo como esto.

FileInputStream in = new FileInputStream("inputFile.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
+0

Esta es una publicación bastante antigua. Asegúrese de que está comentando cuidadosamente sobre algo que es visto por tantas personas, por lo tanto, lo más probable es que muchos expertos ya lo hayan comprobado. – smttsp

3

En Java, la consola de entrada se lleva a cabo mediante la lectura de System.in. Para obtener un flujo basada en caracteres que se adjunta a la consola, envuelva System.in en un BufferedReader objeto. BufferedReader es compatible con un flujo de entrada en el búfer. Su constructor utilizado más comúnmente se muestra aquí:

BufferedReader(Reader inputReader) 

Aquí, inputReader es la corriente que está vinculado a la instancia de BufferedReader que está siendo creado . El lector es una clase abstracta. Una de sus subclases concretas es InputStreamReader, que convierte bytes en caracteres.

Para obtener un objeto InputStreamReader que está vinculado a System.in, utilice el siguiente constructor:

InputStreamReader(InputStream inputStream) 

Debido sistema.en se refiere a un objeto de tipo InputStream, se puede utilizar para inputStream. Poniendo todo junto, la siguiente línea de código crea un BufferedReader que está conectado al teclado:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

Después de esta instrucción se ejecuta, sa es una corriente basada en caracteres que está vinculado a la consola a través de System.in.

Esto se toma del libro Java- The Complete Reference by Herbert Schildt