1. 程式人生 > >java流:轉換流,裝置之間資料的傳輸,更換輸入源、輸出源

java流:轉換流,裝置之間資料的傳輸,更換輸入源、輸出源

轉換流InputStreamReader、OutputStreamWriter

package com.qianfeng.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/*
 * 轉換流:本身是字元流
 * 分類:
 * InputStreamReader:從位元組輸入流到字元讀入流
 * OutputStreamWriter:從位元組輸出流到字元寫出流
 * 
 * 場景:要使用字元緩衝流的readLine(),newLine()方法服務於位元組流。
 * 
 * 例項:使用字元緩衝流的readLine(),newLine()等方法實現在控制檯一次讀一行資料。
 * 
 */
public class Demo2 {

	public static void main(String[] args) throws IOException {
		
		//將標準輸入流轉成字元緩衝讀入流
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		//將標準輸出流轉成字元緩衝輸出流
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		
		//讀寫
		String data=null;
		while((data=bufferedReader.readLine())!=null){
			bufferedWriter.write(data);
			bufferedWriter.newLine();
			
			//手動重新整理
			bufferedWriter.flush();
			
			//當輸入over的時候結束
			if(data.equals("over")){
				break;
			}
		}
		
		//關閉流
		bufferedReader.close();
		bufferedWriter.close();
	}
}

裝置之間資料的傳輸

package com.qianfeng.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Demo3 {

	public static void main(String[] args) throws IOException {
		
		/*
		 * 裝置之間資料的傳輸:
		 * 裝置分成輸入源和輸出源
		 * 輸入源:給記憶體提供資料的裝置
		 * 輸出源:從記憶體接收資料的裝置
		 * 
		 * 輸入源:鍵盤
		 * 輸出源:控制檯
		 * 
		 * 輸入源:鍵盤
		 * 輸出源:檔案
		 * 
		 * 輸入源:檔案
		 * 輸出源:控制檯
		 * 
		 * 輸入源:檔案
		 * 輸出源:檔案
		 * 
		 */
		
		//建立
		//將鍵盤作為輸入源
		BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(System.in));
		
		//將檔案作為輸入源
		BufferedReader bufferedReader2 = new BufferedReader(new FileReader("src/com/qianfeng/test/Demo1.java"));
		
		//將檔案作為輸出源
		BufferedWriter bufferedWriter1 = new BufferedWriter(new FileWriter("temp.txt"));
		
		//將控制檯作為輸出源
		BufferedWriter bufferedWriter2 = new BufferedWriter(new OutputStreamWriter(System.out));
		
		//讀寫
//		 * 輸入源:鍵盤
//		 * 輸出源:控制檯
		String data = null;
//		while((data =bufferedReader1.readLine())!=null){
//			bufferedWriter2.write(data);
//			bufferedWriter2.newLine();
//			bufferedWriter2.flush();
//		}
		
		
//		 * 輸入源:鍵盤
//		 * 輸出源:檔案
//		while((data =bufferedReader1.readLine())!=null){
//			bufferedWriter1.write(data);
//			bufferedWriter1.newLine();
//			bufferedWriter1.flush();
//		}
		
//		 * 輸入源:檔案
//		 * 輸出源:控制檯
//		while((data =bufferedReader2.readLine())!=null){
//			bufferedWriter2.write(data);
//			bufferedWriter2.newLine();
//			bufferedWriter2.flush();
//		}
		
		
//		 * 輸入源:檔案
//		 * 輸出源:檔案
		while((data =bufferedReader2.readLine())!=null){
			bufferedWriter1.write(data);
			bufferedWriter1.newLine();
			bufferedWriter1.flush();
		}
		
		
		//資源關閉
		bufferedReader1.close();
		bufferedReader2.close();
		bufferedWriter1.close();
		bufferedWriter2.close();
		
		
	}
}

更換輸入源、輸出源

package com.qianfeng.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class Demo4 {

	public static void main(String[] args) throws IOException {
		
		/*
		 * 更換輸入源、輸出源
		 * 注意:這裡是臨時更換,只能在當前程式中使用更換後的輸入輸出源,如果在其它的程式中會自動變回原來的鍵盤/控制檯。
		 * 
		 * 例項:從鍵盤到控制檯  更換成  從檔案到檔案
		 */
		
		//更換輸入源--從鍵盤到檔案
		System.setIn(new FileInputStream("src/com/qianfeng/test/Demo1.java"));
		
		//更換輸出源--從控制檯到檔案
		System.setOut(new PrintStream("temp2.txt"));
		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String data = null;
		while((data=bufferedReader.readLine())!=null){
			bufferedWriter.write(data);
			bufferedWriter.newLine();
			bufferedWriter.flush();
		}
		
		bufferedReader.close();
		bufferedWriter.close();
		
	}
}