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

Другие вопросы по тегам