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();
		
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42741866/article/details/82857664