2015-05-15 3 views
0

У меня есть программа, которая использует перенаправление ввода, и в какой-то момент я хочу начать вводить ввод с клавиатуры. Как мне перейти на повторный перенаправление ввода?Входное перенаправление на ввод клавиатуры

я запустить программу следующим образом

java SomeClass < data.txt 

Код выглядит примерно так

java.util.Scanner = new java.util.Scanner(System.in); 
//Process the data from data.txt 
//Here I want to be able to receive input from the keyboard, but input still only looks for input from data.txt 

Есть ли какой-то способ, которым я могу идти о получении сигналов от клавиатуры еще раз, используя вышеупомянутый метод, или в качестве альтернативы , какие существуют другие варианты для приема данных из двух разных источников?

P.S. Я использую Windows.

+0

Нужно ли использовать io-redirection? Как просто передать имя файла в качестве аргумента командной строки и прочитать файл в коде? – copeg

+0

@copeg Я собирался сделать это, но ради любопытства я задаю этот вопрос. –

ответ

1

В Unix (включая OS X) вы должны использовать команду cat, чтобы комбинировать входные данные из двух или нескольких источников, в порядке очереди, в один поток. Затем можно передать, что в вашей программе:

cat data.txt - | java SomeClass 

Голый - аргумент представляет собой стандартный ввод, который соединен с клавиатурой в интерактивной сессии оболочки.

+0

Я использую окна, любые предложения? –

+0

Windows не поставляется с чем-то вроде «кошки». Там 'type', который похож, но он не делает то, что вам нужно. Возможно, у Powershell есть способ сделать это, но я не сразу что-то поворачиваю. Возможно, вы могли бы создать именованный канал, перенаправить его ввод в 'java' и скопировать в него как' data.txt', так и 'CON'. У большего числа пользователей Windows-y может быть лучшее предложение. –

0

Как насчет того, чтобы иметь много входов и использовать их, когда вам нужно?

Scanner keyboardScanner = new Scanner(System.in); 
Scanner fileScanner = new Scanner("data.txt"); 
    //Process the data from data.txt 
    fileScanner.nextLine(); 
    //Here I want to be able to receive input from the keyboard, but input still only looks for input 
    keyboardScanner.nextLine(); 
+0

Конечно, если вы хотите, чтобы программа * зависела * от этой компоновки входов, или если вы хотите дать ей варианты поддержки этого. Точка переадресации ввода-вывода заключается в том, что программа не должна иметь какой-либо из встроенных функций. Но с учетом этого да, это может сработать. –

+0

Хорошо. Как насчет предоставления имени файла в командной строке? Что-то вроде> app1 -input1 data.txt -input2 dat.file – Alex

+0

Да, как я уже сказал, программа Java может альтернативно принимать параметры, с помощью которых вы можете настроить такое поведение. Это более гибко, чем жесткая проводка, но не так хорошо, как не беспокоиться об этом вообще. –