Domanda

Ecco un semplice pezzo di codice:

import java.io.*;
public class Read {
 public static void main(String[] args) {
     BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
  while(true)
  {
   String x = null;
   try{
    x = f.readLine();
   }
   catch (IOException e) {e.printStackTrace();}
   System.out.println(x);
  }
 }
}

Lo eseguo come: java Leggi < input.txt

Una volta che input.txt è stato completamente reindirizzato nel programma, x continua a ricevere infiniti null. Perchè è così? Esiste un modo per rendere attivo lo Standard In (riga di comando) dopo che il file viene inserito nel codice? Ho provato a chiudere il flusso e riaprirlo, non funziona. Ripristina anche ecc.

È stato utile?

Soluzione

Eseguendo "java Read < input.txt" hai detto al sistema operativo che per questo processo, il file in pipe è standard. Non puoi quindi tornare alla riga di comando dall'interno dell'applicazione.

Se vuoi farlo, passa input.txt come parametro del nome file all'applicazione, apri / leggi / chiudi il file dall'interno dell'applicazione, quindi leggi l'input standard per ottenere cose dalla riga di comando.

Altri suggerimenti

Bene, questo è tipico per la lettura in BufferedReader. readLine() restituisce null quando viene raggiunta la fine dello stream. Forse il tuo ciclo infinito è il problema ;-)

// try / catch ommitted

String x = null;

while( (x = f.readLine()) != null )
{
   System.out.println(x);
}

Devi terminare il tuo ciclo while quando la linea è nulla, in questo modo:

    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
    }
    catch (IOException e) {
        logger.error("IOException reading System.in", e);
        throw e;
    }
    finally {
        if (in != null) {
            in.close();
        }
    }
  

Esiste un modo in cui posso fare lo Standard In (riga di comando)   attivo dopo che il file inserito nel codice è terminato?

Mi dispiace rispondere a una vecchia domanda, ma nessuna delle risposte finora indica che è un modo (solo shell) per tornare all'input della console dopo aver eseguito il piping in un file.

Se si esegue il comando

{ cat input.txt & cat; } | java Read

quindi il testo da input.txt verrà passato a java Read e verrai quindi reindirizzato all'input della console.

Nota che se poi premi Ctrl + D , otterrai il ciclo infinito di null s, a meno che tu non modifichi il tuo programma per terminare il ciclo quando riceve null.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top