Pergunta

Aqui é um simples pedaço de código:

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);
  }
 }
}

Eu executar este como: java Leia

Uma vez que o input.txt é completamente canalizada para o programa, x mantém cada vez infinitas nulos. Por que? Existe uma maneira pela qual eu posso fazer o Em Padrão (linha de comando) ativo após o arquivo que está sendo alimentado no código é feito? Eu tentei fechar o fluxo e reabertura, ele não funciona. Redefinir etc também.

Foi útil?

Solução

Ao executar "java Read < input.txt" você disse o sistema operacional que para este processo, o arquivo encanada é no padrão. Você não pode, em seguida, voltar para a linha de comando de dentro do aplicativo.

Se você quiser fazer isso, então passar input.txt como um parâmetro de nome de arquivo para o aplicativo, / open ler / fechar o arquivo de si mesmo de dentro do aplicativo, em seguida, ler da entrada padrão para obter o material a partir da linha de comando.

Outras dicas

Bem, isso é típico para leitura em um BufferedReader. readLine() retornos null quando fim do fluxo é atingido. Talvez o seu loop infinito é o problema; -)

// try / catch ommitted

String x = null;

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

Você precisa terminar o seu loop while quando a linha é nulo, como este:

    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();
        }
    }

Existe uma maneira pela qual eu posso fazer o Em Padrão (linha de comando) ativo após o arquivo que está sendo alimentado no código é feito?

Desculpe bater uma velha questão, mas nenhuma das respostas até agora aponta que há é a (shell-only) maneira de passar de volta para a entrada do console após a tubulação em um arquivo.

Se você executar o comando

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

, em seguida, o texto da input.txt será passado para java Read e então você vai ser deixado cair de volta para a entrada do console.

Note que se você, em seguida, pressione Ctrl + D , você vai ter o loop infinito de nulls, a menos que você modifique seu programa para terminar o loop quando recebe nulo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top