重定向标准输出和标准输入 - Java
Redirecting the stdout and 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;
}
当我们尝试 debug/test 小型控制台应用程序时,以这种方式使用 freopen()
非常有用。我们可以将示例输入放入 'input.txt' 文件一次,每次都重复使用它们,而不是在 terminal/console 中手动输入。同样,我们可以在 'output.txt' 文件中打印输出。
现在我正在 java 中寻找类似类型的解决方案,以便我可以将输入和输出重定向到文本文件。我的目标是在处理一些数据时简化小型 console/program 调试。将这些数据作为输入循环提供给 terminal/console 有点麻烦。任何人都可以提出一些好的建议吗?
您可以使用 System.setIn
and System.setOut
重新分配流。
System.setIn(new FileInputStream(new File("input.txt")));
System.setOut(new PrintStream(new File("output.txt")));
要从文件而不是用户输入中获取数据,您只需要稍微更改一下构建 Scanner 时的操作即可。
导入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")));
对于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));
在编写 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;
}
当我们尝试 debug/test 小型控制台应用程序时,以这种方式使用 freopen()
非常有用。我们可以将示例输入放入 'input.txt' 文件一次,每次都重复使用它们,而不是在 terminal/console 中手动输入。同样,我们可以在 'output.txt' 文件中打印输出。
现在我正在 java 中寻找类似类型的解决方案,以便我可以将输入和输出重定向到文本文件。我的目标是在处理一些数据时简化小型 console/program 调试。将这些数据作为输入循环提供给 terminal/console 有点麻烦。任何人都可以提出一些好的建议吗?
您可以使用 System.setIn
and System.setOut
重新分配流。
System.setIn(new FileInputStream(new File("input.txt")));
System.setOut(new PrintStream(new File("output.txt")));
要从文件而不是用户输入中获取数据,您只需要稍微更改一下构建 Scanner 时的操作即可。
导入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")));
对于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));