一、转换流
在IO包中,实际上只有字节流,字符流是在字节流的基础上转换出来的。
转换流用于在字节流和字符流之间转换。
1、InputStreamReader:
是Reader的子类,将输入的字节流变为字符流
即:将一个字节流的输入对象变为字符流的输入对象。
InputStreamReader需要和InputStream“套接”,它可以将字节流中读入的字节解码成字符
2、OutputStreamWriter:
是Writer的子类,将输出的字符流变为字节流
即:将一个字符流的输出对象变为字节流的输出对象。
OutputStreamWriter需要和OutputStream“套接”,它可以将要写入字节流的字符编码成字节
例题:字节流变为字符流
package convert;
import java.io.*;
public class InputStreamReaderDemo {
public static void main(String[] args) {
InputStreamReader isr=new InputStreamReader(System.in); // 包装的是读取键盘输入的输入流
BufferedReader br=new BufferedReader(isr); // 将InputStreamReader包装到BufferedReader
System.out.print("请输入:");
try {
String content=br.readLine(); // 读取键盘输入,输入完成之前一直阻塞
System.out.println("您输入的内容是:"+content);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
例题:字符流变为字节流
package convert;
import java.io.*;
public class OutputStreamWriterDemo {
public static void main(String[] args) {
OutputStream out=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
try {
out=new FileOutputStream("c:"+File.separator+"test.txt");
osw=new OutputStreamWriter(out); // 将out对象包装到OutputStreamWriter对象中
bw=new BufferedWriter(osw); // 将osw对象包装到BufferedWriter对象中
bw.write("hello java");
bw.newLine(); // 换行
bw.write("中国");
System.out.println("写入成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
例题:读取(Decode)文件内容
package convert;
import java.io.*;
public class DecodeDemo {
public static void main(String[] args) {
InputStream input=null;
InputStreamReader isr=null;
try {
input=new FileInputStream("c:"+File.separator+"test.txt");
isr=new InputStreamReader(input,"utf-8"); // 指定InputStreamReader的编码
char[] c=new char[1024];
int len=isr.read(c);
System.out.println("读取的内容是:"+new String(c,0,len));
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
例题:编译(Encode)文件内容
package convert;
import java.io.*;
public class EncodeDemo {
public static void main(String[] args) {
OutputStream out=null;
OutputStreamWriter osw=null;
try {
out=new FileOutputStream("c:"+File.separator+"test.txt");
osw=new OutputStreamWriter(out,"utf-8"); // 对OutputStreamWriter设置编码
osw.write("中华人民共和国");
osw.flush();
System.out.println("写入成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
二、标准输入输出流
1. System.in 标准输入流
2. System.out标准输出流
3. System.err“标准”错误输出流