1. InputStreamReader
是Reader的子类,字符流对象,字节流向字符的桥梁。InputStreamReader有一个子类就是FileReader字节转成字符流。
构造方法:InputStreamReader(InputStream in)传递字节输入流,变成字符流
代码:
/*
* 转换流,将字节转成字符流
* 实现读取一行的功能
* System.in
* InputStreamReader--字节变字符,Reader的子类
* BufferedReader
*/
import java.io.*;
public class TranseDemo {
public static void main(String[] args)throws IOException {
//获取键盘输入的字节流
InputStream in = System.in;
//将键盘输入流,字节流in,转成字符流,
//InputStreamReader构造方法中,传递字节输入流、
InputStreamReader isr = new InputStreamReader(in);
//可以使用字符流缓冲区读取一行
BufferedReader bfr = new BufferedReader(isr);
String line = null;
while((line = bfr.readLine())!=null){
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bfr.close();
}
}
2. 控制台输出 System.out
System类的静态成员变量public static final PrintStream out;返回打印流对象,知道的是打印流对象也是字节输出流OutputStream的子类。
上面的程序,readLine()读取到的字符,不能直接写到字节输出流中,将字符流数据,转成字节流数据,写回控制台
3. OutputStreamWriter 是Writer的子类,字符流对象,字符流向字节的桥梁
OutputStreamWriter构造方法,传递的是字节输出流,System.out
代码:
import java.io.*;
public class TranseDemo{
public static void main(String[] args) throws IOException{
//获取键盘输入的字节流
InputStream in = System.in;
//将键盘输入流,字节流in,转成字符流,InputStreamReader构造方法中,传递字节输入流、
InputStreamReader isr = new InputStreamReader(in);
//可以使用字符流缓冲区读取一行
BufferedReader bfr = new BufferedReader(isr);
//将读取到的readline()的数据输出到控制台,数据是一个字符流
//输出数据的目的 System.out;
//获得字节输出流对象
OutputStream out = System.out;
//将字符流转成字节流
OutputStreamWriter osw = new OutputStreamWriter(out);
//OutputStreamWriter是字符流,可以使用字符流缓冲区对象操作,
//实现写换行
BufferedWriter bfw = new BufferedWriter(osw);
String line = null;
while((line = bfr.readLine())!=null){
if("over".equals(line))
break;
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();
}
}
4. 转换流的案例
1)读取键盘输入,输入后的内容,转成大写,保存在一个记事本中
代码:
import java.io.*;
public class TranseDemo {
public static void main(String[] args)throws IOException {
InputStream in = System.in;//键盘输入
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bfr = new BufferedReader(isr);
OutputStream out = new FileOutputStream("c:\\upper.txt");
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bfw = new BufferedWriter(osw);
String line = null;
while((line = bfr.readLine())!=null){
if("over".equalsIgnoreCase(line))
break;
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();
}
}
2) 读取一个文本文件,转大写后,输出在控制台
代码:
import java.io.*;
public class TranseDemo{
public static void main(String[] args)throws IOException {
InputStream in = new FileInputStream("src\\cn\\itcast\\iostream\\copytext3.java");
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bfr = new BufferedReader(isr);
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bfw = new BufferedWriter(osw);
String line = null;
while((line = bfr.readLine())!=null){
if("over".equalsIgnoreCase(line))
break;
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();
}
}
3) 读取一个文本文件,转大写后,输出在另一个文件中
import java.io.*;
public class TranseDemo{
public static void main(String[] args)throws IOException {
InputStream in = new FileInputStream("src\\cn\\itcast\\iostream\\copytext3.java");
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bfr = new BufferedReader(isr);
OutputStream out = new FileOutputStream("c:\\123.java");
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bfw = new BufferedWriter(osw);
String line = null;
while((line = bfr.readLine())!=null){
if("over".equalsIgnoreCase(line))
break;
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();
}
}