A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kevin.Kang 高级黑马   /  2015-7-27 17:04  /  389 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符流:通过一个转换流把字节流转换成字节流+编码表
        常见编码表:
                ACSII表:7位表示一个数据,最高位为符号位。
                Unicode表:国际标准码,融合了多种文字。
                ISO-8859-1:拉丁码表,8位表示一个数据。
                GB2312/GBK/GB18030:中文码表,GBK18030替代GBK
                BIG5:通行于台湾,香港地区的繁体字编码表。俗称“大五码”
                UTF-8:最多用三个字节来表示一个字符。能用一个就用一个,现在不行就用三个。

5 个回复

倒序浏览
顶一下,,,,
回复 使用道具 举报
本帖最后由 Kevin.Kang 于 2015-7-27 17:52 编辑
  1. package com.kxg.zifu;

  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;

  7. /*
  8. * OutputStreamWriter:字符输出流
  9. *                 public OutputStreamWriter(OutputStream out):根据默认编码表把字节流的数据转换为字符流
  10. * public OutputStreamWriter(OutputStream out,Charset cs):根据指定编码表把字节流的数据转换为字符流
  11. *
  12. * InputStreamReader:字符输入流
  13. *                 public InputStreamReader(InputStream in):根据默认编码表把字节流的数据转换为字符流
  14. *                 public InputStreamReader(InputStream in,Charset cs):根据指定编码表把字节流的数据转换为字符流
  15. *
  16. */
  17. public class ZiFu {
  18.         public static void main(String[] args) throws IOException {
  19.                 InputStreamReader isr = new InputStreamReader(new FileInputStream(
  20.                                 "a.txt"));
  21.                 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
  22.                                 "b.txt"));

  23.                 int i = 0;
  24.                 while ((i = isr.read()) != -1) {
  25.                         osw.write(i);
  26.                 }
  27.                 osw.flush();

  28.                 osw.close();
  29.                 isr.close();
  30.         }
  31. }
复制代码
默认的编码表跟随系统,系统为简体中文,默认的编码表就为简体中文。


flush()和close()的区别:
flush():刷新缓冲区,刷新之后流对象还可以继续使用。
close():关闭流对象之前会刷新一次缓冲区,关闭之后流对象就不能继续使用。

回复 使用道具 举报
FileWriter和FileReader:
  1. package com.kxg.zifu;

  2. import java.io.FileReader;
  3. import java.io.FileWriter;
  4. import java.io.IOException;

  5. /*
  6. * 由于转换流的名称过长,Java提供了其子类供我们使用。
  7. * OutputStreamWriter = FileOutputStream + 编码表
  8. * FileWriter = FileOutputStream + 编码表
  9. */
  10. public class ZiFuDemo {
  11.         public static void main(String[] args) throws IOException {
  12.                 // public FileReader(String fileName)
  13.                 // 构造方法中可以直接给一个路径或者文件名
  14.                 FileReader fr = new FileReader("a.txt");
  15.                 FileWriter fw = new FileWriter("b.txt");
  16.                
  17.                 FileReader fr2 = new FileReader("a.txt");
  18.                 FileWriter fw2 = new FileWriter("c.txt");

  19.                 int i = 0;
  20.                 while ((i = fr.read()) != -1) {
  21.                         fw.write(i);
  22.                 }

  23.                 char[] chs = new char[1024];
  24.                 int len = 0;
  25.                 while ((len = fr2.read(chs)) != -1) {
  26.                         fw2.write(chs);
  27.                 }

  28.                 fr.close();
  29.                 fw.close();
  30.                 fw2.close();
  31.         }
  32. }
复制代码



回复 使用道具 举报
高效字符流:
  1. package com.kxg.zifu;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;

  7. public class ZiFuDemo2 {
  8.         public static void main(String[] args) throws IOException {
  9.                 BufferedReader br = new BufferedReader(new FileReader("a.txt"));
  10.                 BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));

  11.                 BufferedReader br2 = new BufferedReader(new FileReader("a.txt"));
  12.                 BufferedWriter bw2 = new BufferedWriter(new FileWriter("c.txt"));

  13.                 int i = 0;
  14.                 while ((i = br.read()) != -1) {
  15.                         bw.write(i);
  16.                 }

  17.                 char[] chs = new char[1024];
  18.                 int len = 0;
  19.                 while ((len = br2.read(chs)) != -1) {
  20.                         bw2.write(chs);
  21.                 }

  22.                 br.close();
  23.                 bw.close();
  24.                 br2.close();
  25.                 bw2.close();
  26.         }
  27. }
复制代码



回复 使用道具 举报
高效字符流的特殊功能:一次读写一行
  1. package com.kxg.zifu;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;

  7. public class ZiFuDemo3 {
  8.         public static void main(String[] args) throws IOException {
  9.                 write();
  10.                 read();
  11.         }

  12.         private static void write() throws IOException {
  13.                 BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
  14.                 for (int x = 0; x < 10; x++) {
  15.                         bw.write("hello" + x);
  16.                         bw.newLine();// 写入一个行分隔符,也就是换行
  17.                         bw.flush();
  18.                 }
  19.                 bw.close();
  20.         }

  21.         private static void read() throws IOException {
  22.                 BufferedReader br = new BufferedReader(new FileReader("a.txt"));
  23.                 String line = null;
  24.                 // readLine()方法读取到换行就结束了,打印的时候就要自己加换行。
  25.                 while ((line = br.readLine()) != null) {
  26.                         System.out.println(line);
  27.                 }
  28.                 br.close();
  29.         }
  30. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马