Перенаправление 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‘ файл.

Сейчас я ищу предисловие аналогичного типа решения в Джава так что я могу перенаправить ввод и вывод в текстовый файл. Моя цель — упростить отладку небольшой консоли / программы при манипулировании некоторыми данными. Предоставление этих данных на терминал / консоль периодически, как ввод, несколько громоздко. Кто-нибудь может предложить несколько хороших советов для этого?

4

Решение

Для 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));
3

Другие решения

Вы можете переназначить потоки используя System.setIn а также System.setOut.

System.setIn(new FileInputStream(new File("input.txt")));
System.setOut(new PrintStream(new File("output.txt")));
4

Для получения данных из файла, а не ввода пользователя, вам просто нужно немного изменить то, что вы делаете, когда создаете свой сканер.

импорт 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 () будут записаны в файл.

1
По вопросам рекламы [email protected]