Перенаправление stdout и stdin - Java
Пока пишу c/c++
код довольно удобно использовать freopen (). Пожалуйста, посмотрите следующий фрагмент кода -
int main(){
int n1, n2, result;
freopen("input.txt", "rb", stdin);
freopen("output.txt", "wb", sdtout);
while(scanf("%d %d", &n1, &n2)==2 && n1>0 &&n2>0){
...
...
...
printf("%d\n", result);
}
return 0;
}
Использование freopen()
этот способ очень полезен, когда мы пытаемся отладить / протестировать небольшое консольное приложение. Мы можем поместить пример ввода в файл input.txt один раз и использовать его каждый раз вместо того, чтобы вводить данные вручную в терминале / консоли. Точно так же мы можем напечатать вывод в файле ' output.txt '.
Теперь я ищу предисловие аналогичного типа решения в Java, чтобы я мог перенаправить ввод и вывод в текстовый файл. Моя цель - упростить отладку небольшой консоли / программы при манипулировании некоторыми данными. Предоставление этих данных на терминал / консоль периодически, как ввод, несколько громоздко. Кто-нибудь может предложить несколько хороших советов для этого?
3 ответа
Для System.out
System.setOut(new PrintStream(new File("output-file.txt")));
Для System.err
System.setErr(new PrintStream(new File("err_output-file.txt")));
Для System.in
System.setIn(new FileInputStream(new File("input-file.txt")));
* сбросить обратно на консоль
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.setErr(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.setIn(new FileInputStream(FileDescriptor.in));
Вы можете переназначить потоки используя System.setIn
а также System.setOut
,
System.setIn(new FileInputStream(new File("input.txt")));
System.setOut(new PrintStream(new File("output.txt")));
Для получения данных из файла, а не ввода пользователя, вам просто нужно немного изменить то, что вы делаете, когда создаете свой сканер.
импорт java.io.*; для некоторых классов сделайте это:
try{
Scanner input = new Scanner(new File("input_file_name.in"));
}
catch(FileNotFoundException e){
e.printStackTrace();
}
Затем просто используйте сканер, как обычно, и он будет читать из файла.
Чтобы записать в файл данных вместо стандартного, вы можете сделать это, чтобы изменить стандартный вывод на файл данных:
try{
FileOutputStream f = new FileOutputStream(new File("output_file_name.out"));
PrintStream p = new PrintStream(f);
System.setOut(p);
}
catch(Exception e){
e.printStackTrace();
}
Все операции с System.out.print() и System.out.println() будут записаны в файл.