在online judge中Java输入输出重定向,以及提交时不更改代码的操作

 

在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上实现输入输出重定向的操作。

正题到此完毕。

我还是一个初学计算机的新人,如有错误,希望大佬指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值