一、转换流
在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“标准”错误输出流