0. 概要
本文記錄一下 Java和C++的標準輸出流重定向。
1. Java
輸入文件-> D:\\TerminalInput\\student.txt
5
huhu 5
haha 3
xixi 5
hengheng 2
gaoshou 8
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String INPUT = "D:\\TerminalInput\\student.txt";
String OUTPUT = "D:\\TerminalInput\\student_out.txt";
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) {
e.printStackTrace();
}
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
System.out.println(sc.nextLine());
}
System.out.println("Done1"); // "Done1" 寫入文件中
System.err.println("Done2"); // "Done2" 作爲錯誤日誌, 只打印,不會寫到文件中
}
}
輸出文件-> D:\\TerminalInput\\student_out.txt
5
huhu 5
haha 3
xixi 5
hengheng 2
gaoshou 8
Done1
2. C Plus Plus
C++
還是上面的輸入數據 student.txt
現在根據學生的分數大小,從大到小進行排序。
#include <iostream>
using namespace std;
//創建一個結構體,用來存儲學生的姓名和分數
struct student{
char name[21];
int score;
};
int main(int argc, char *argv[])
{
struct student s[100], temp;
int i,j, n ;
freopen("D:\\TerminalInput\\student.txt", "r", stdin);
freopen("D:\\TerminalInput\\student_sort_by_score.txt", "w", stdout);
scanf("%d", &n);
for(i=0; i< n; i++){
scanf("%s %d", &s[i].name, &s[i].score);
}
// for(int k=0; k< n; k++){
// printf("%s %d ", s[k].name, s[k].score);//
// }
// cout<< endl;
//分數從高到低排列
for(i=1; i<n; i++){
for(j=0; j< n-i; j++){
if(s[j].score < s[j+1].score){
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
for(int k=0; k<n; k++)
printf("%d %s\n", s[k].score, s[k].name);
fclose(stdin);//關閉輸入流
fclose(stdout);//關閉輸出流
return 0;
}