5

在编写代码时,使用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>0 &&n2>0){
  ...
  ...
  ...
  printf("%d\n", result);
 }

 return 0;
}

freopen()当我们尝试调试/测试一个小型控制台应用程序时,这种方式的使用非常有用。我们可以将样本输入一次放在“input.txt”文件中,然后每次都重复使用它们,而不是在终端/控制台中手动输入。同样,我们可以在“output.txt ”文件中打印输出。

现在我正在寻找java中类似类型的解决方案,以便我可以将输入和输出重定向到文本文件。我的目标是在处理一些数据的同时简化小型控制台/程序调试。将这些数据作为输入反复提供给终端/控制台有点麻烦。任何人都可以提出一些好的建议吗?

4

3 回答 3

4

System.setIn您可以使用和重新分配流System.setOut

System.setIn(new FileInputStream(new File("input.txt")));
System.setOut(new PrintStream(new File("output.txt")));
于 2015-01-02T19:30:33.477 回答
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));
于 2015-01-02T19:37:20.947 回答
1

为了从文件而不是用户输入中获取数据,您只需稍微更改构建扫描仪时所做的事情。

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

于 2015-01-02T19:35:42.460 回答