------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、转换流
流在对数据进行操作时,如果需要对指定编码表的数据进行读取或者将数据按照指定的编码表存取,就需要用到转换流。InputStreamReader和OutputStreamWriter是两个最常用到的转换流。使用方法如下。
class Demo{
//创建一个字节读取流对象
FileInputStream fis = new FileInputStream();
/*创建一个读取转换流对象,该转换流对象实例化时需要接收一个字节读取流对象和一个指定
* 的编码表,最终这个转换流对象用于读取按照该编码表编码的文件*/
*/
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
//创建一个字节写入流对象
FileOutputStream fos = new FileOutputStream();
/*创建一个写入转换流对象,该对象在实例化时需要接收一个字节写入流对象和一个指定的
* 编码表,最终该转换流对象用于按照该编码表将数据存储到文件中。
*/
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
}
写一个程序,改程序能够读取键盘录入的数据,并将数据存储到E盘下。
/*
* 需求:写一个程序,改程序能够读取键盘录入的数据,并将数据存储到E盘下。
* 思路:
* 1.本质是数据的传输,需要使用流对象
* 2.源:键盘 目的地:e盘下一个自定义的文件
* 3.使用System.in对象和FileWriter对象
*/
package com.itheima;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
class Demo{
public static void main(String[] args)throws IOException{
//将System.in对象转换为字符流对象,因为键盘录入的都是字符,读取方便
InputStreamReader isr = new InputStreamReader(System.in);
//创建一个字符写入流对象,用于写入数据
FileWriter fw = new FileWriter("e:\\abc.txt");
//使用字符读取流的缓冲技术,提高读取效率
BufferedReader bur =new BufferedReader(isr);
//使用字符写入流的缓冲技术,提高写入效率
BufferedWriter buw =new BufferedWriter(fw);
//循环读取和写入
String line = null;
while((line=bur.readLine())!=null){
if(line.equals("over")) //定义一个结束标记
break;
buw.write(line);
buw.newLine();
buw.flush();
}
//关闭流资源
if(bur!=null)
bur.close();
if(buw!=null)
buw.close();
}
}
三、改变标准录入和输出设备
我们知道,默认情况下,System.in指向的是标准输入设备(键盘),System.out指向的是标准输出设备(控制台)。。。实际开发中我们可能需要改变这两个指向,具体方法如下。
//改变标准输入流指向
System.setIn(new FileReader("123.txt"));
//改变标准输出流指向
System.setOut(new PrintStream("456.txt"));