Entrada de comando Line Pipe em Java
-
07-07-2019 - |
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.
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 null
s, a menos que você modifique seu programa para terminar o loop quando recebe nulo.