在OJ上写题时,由于有些时候数据规模有些大,在本地调试代码时自己复制到终端下实在太麻烦,一般都是重定向到文件中输入输出。在C/C++中一般可以采用以下形式进行输入输出重定向
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
//你的代码
return 0;
}
而在提交时,为了避免忘了将重定向删去而收获罚时,我一般在本地编译中加入-DZYP命令,使得在代码中定义了一个ZYP,然后代码就改成了如下形式
#include<bits/stdc++.h>
using namespace std;
int main()
{
#ifdef ZYP
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
//你的代码
return 0;
}
上面是瞎比比
下面切入正题
在Java中,我们可以通过以下方式进行重定向输入输出
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
class Main {
public static void main(String[] args) throws Exception
{
//输入重定向
FileInputStream in=new FileInputStream("main.in");
System.setIn(in);
//输出重定向
PrintStream out=new PrintStream(new FileOutputStream("main.out"));
System.setOut(out);
//你的代码
}
}
然而很遗憾的是,在Java中没有条件编译(反正我Google了一圈只找到了一个用Java语法糖实现的条件编译,然后还是要在提交前更改代码),那就只能通过异常处理实现提交时不更改代码,下面是代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
class Main {
public static void main(String[] args) throws Exception
{
try
{
//输入重定向
FileInputStream in=new FileInputStream("main.in");
System.setIn(in);
//输出重定向
PrintStream out=new PrintStream(new FileOutputStream("main.out"));
System.setOut(out);
}
catch (Exception e){}
//你的代码
}
}
以上就是Java在OJ上实现输入输出重定向的操作。
正题到此完毕。
我还是一个初学计算机的新人,如有错误,希望大佬指正。