重定向stdout和stdin-Java

重定向stdout和stdin-Java,java,c++,debugging,io,freopen,Java,C++,Debugging,Io,Freopen,在编写c/c++代码时,它使用起来非常方便。请参阅下面的代码片段- int main(){ int n1, n2, result; freopen("input.txt", "rb", stdin); freopen("output.txt", "wb", sdtout); while(scanf("%d %d", &n1, &n2)==2 && n1

在编写
c/c++
代码时,它使用起来非常方便。请参阅下面的代码片段-

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中介绍一种类似的解决方案,以便将输入和输出重定向到文本文件。我的目标是简化小控制台/程序调试,同时处理一些数据。将这些数据作为输入反复提供给终端/控制台有些麻烦。有人能为您提供一些好的建议吗?

您可以使用和重新分配流


为了从文件而不是用户输入中获取数据,您只需稍微更改一下构建扫描仪时的操作

导入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()的所有操作都将写入文件。

对于System.out

System.setOut(new PrintStream(new File("output-file.txt")));
For 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));

使用
java-cp在命令行中执行此操作有什么错。。。MyClassoutput.txt
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.setErr(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.setIn(new FileInputStream(FileDescriptor.in));