2011-03-30 19 views
32

Non sono sicuro di come si supponga di leggere dall'input del sistema da un file Java.Lettura da System.in - Java

Voglio essere in grado di chiamare java myProg < file

dove file è quello che voglio essere letto come una stringa e dato a myprog nel metodo principale.

Qualche suggerimento?

+0

Qual è il problema esattamente? 1) non sai come avviare un programma java con un argomento 2) non sai come aprire un file all'interno di un programma java che ha il nome file come argomento del metodo principale. o 3) sia – Fortega

+2

@Fortega nessuno di quelli. Vuole mettere un file in pipe al posto dell'input del sistema. – corsiKa

+1

@Peter a volte legge 68 milioni di pagine è un po 'troppo! – corsiKa

risposta

50

È possibile utilizzare System.in per leggere dallo standard input. Funziona proprio come inserendolo da una tastiera. Il sistema operativo gestisce il passaggio dal file allo standard input. :-)

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

non dimenticare di importare java.util.Scanner – shieldgenerator7

+0

anche, documentazione dello scanner: https://docs.oracle .com/javase/7/docs/api/java/util/Scanner.html – shieldgenerator7

4

Usa System.in, si tratta di un InputStream che solo serve a questo scopo

16

Beh, si può leggere System.in per sé in quanto è una valida InputStream. O anche si può avvolgere in un BufferedReader:

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

Il wrapping in un BufferedReader sembra una cattiva idea perché su Linux (forse non in ogni configurazione) porta al tuo programma a non ricevere i dati dopo aver digitato qualcosa nel terminale/PuTTy e premere "Invio". Affinché il programma ottenga ciò che hai digitato, devi inviare un carattere speciale per svuotare il flusso. –

4

Si potrebbe leggere da System.in, proprio come si farebbe per l'input da tastiera utilizzando, per esempio, o InputStreamReaderScanner.

1

È possibile chiamare 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

Probabilmente alla ricerca di qualcosa di simile.

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

Questo è un post piuttosto vecchio. Assicurati di commentare attentamente qualcosa che è visto da così tante persone, quindi, molto probabilmente molti esperti lo hanno già controllato. – smttsp

3

In Java, console di input è compiuto con la lettura da System.in. Per ottenere un flusso di caratteri base che è collegato alla console, avvolgere System.in in un BufferedReader oggetto. BufferedReader supporta un flusso di input con buffer. Il suo costruttore più comunemente usato è mostrato qui:

BufferedReader(Reader inputReader) 

Qui, inputReader è il torrente che è legata all'istanza di BufferedReader che si sta creato. Reader è una classe astratta. Una delle sottoclassi concrete è InputStreamReader, che converte i byte in caratteri.

Per ottenere un oggetto InputStreamReader che è collegato a System.in, utilizzare il seguente costruttore:

InputStreamReader(InputStream inputStream) 

Poiché sistema.in fa riferimento a un oggetto di tipo InputStream, può essere utilizzato per inputStream. Mettere tutto insieme, la seguente riga di codice crea un BufferedReader che è collegato alla tastiera:

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

Dopo questa istruzione viene eseguita, BR è un flusso di caratteri di base che è legato alla console tramite System.in.

Questo è preso dal libro Java- The Complete Reference by Herbert Schildt

Problemi correlati