java中的freopen

时间:2022-01-22 08:32:48

在做ACM题目的时候,为节省输入测试数据的时间,我们通常将数据复制到一个文本文档里,然后从文档里读出,避免在控制台一个数据一个数据的输入。

之前一直用的C/C++,freopen用起来很方便,如下:

 #define INPUT "C:/input.txt"
#define OUTPUT "C:/output.txt" int main() {
// connect I/O streams to files
freopen(INPUT, "r", stdin);
freopen(OUTPUT, "w", stdout); int x;
while (cin >> x) {
cout << x << endl;
} cerr << "done." << endl;
return ;
}

最近转到java,一时半会儿诸多不习惯,其中就有这个问题,java里怎么写“freopen”?如下:

 public class Main {
static private final String INPUT = "C:/input.txt";
static private final String OUTPUT = "C:/output.txt"; public static void main(String args[]) {
// open I/O files
FileInputStream instream = null;
PrintStream outstream = null; try {
instream = new FileInputStream(INPUT);
outstream = new PrintStream(new FileOutputStream(OUTPUT));
System.setIn(instream);
System.setOut(outstream);
} catch (Exception e) {
System.err.println("Error Occurred.");
} Scanner in = new Scanner(System.in);
for (;in.hasNext();) {
int x = in.nextInt();
System.out.println(x);
} System.err.println("done.");
return;
} }

google了很多地方才找到这个模板,貌似来自一个日本的站点:http://techtipshoge.blogspot.com/2011/01/connect-standard-io-to-files.html

更厉害的一个站点,讲不同语言中的标准输入输出重定向(freopen),传送门,点开绝对有惊喜!也是一个日本程序员的个人博客。厉害!