1. java.io.PushbackReader与前面提到的PushbackInputStream类似,都拥有一个PushBack缓冲区,只不过PushbackReader所处理的是字符。从这个对象读出数据后,如果愿意的话,只要PushBack缓冲区没有满,就可以使用unread()将数据推回流的前端。
2. 下面的示例示范了可以将文本文件中的一些数学符号:<,>,<=,>=,!=,=转换为BIG5码中的对应字符:
package ysu.hxy; import java.io.*; public class PushbackReaderDemo { public static void main(String[] args) { char[] symbols={'<', '>', '≦', '≧', '≠', '='}; try { PushbackReader pushbackReader = new PushbackReader(new FileReader(args[0])); FileWriter fileWriter = new FileWriter("math_"+args[0]); int c = 0; while((c=pushbackReader.read()) != -1) { int poss = -1; switch(c) { case '<' : poss = 0;break; case '>' : poss = 1;break; case '!': poss = 2;break; case '=': poss = 5;break; default: fileWriter.write(c); } if(poss != -1) { //如果再往下读入一个字符是'='号的话,比如说<=,>=,这里不能在原文件中出现'==',如果有这种情况,则需要在下面的if段中再加一个if判断 if((c = pushbackReader.read()) == '=') { fileWriter.write(symbols[poss+2]); fileWriter.write(' '); } else { //如果不是'=',则把刚才读入的那个字符再推回流的前端 pushbackReader.unread(c); fileWriter.write(symbols[poss]); } } } pushbackReader.close(); fileWriter.close(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("请指定文件"); } catch(IOException e) { e.printStackTrace(); } } }运行结果:比如说当前目录下文件ttt.txt里有如下内容:
x+y<=3y+z!=w1+x>=4x+y>3x-y<41+1=2!2
运行的结果是:当前目录下的math_ttt.txt文件中有以下内容:
x+y≦ 3y+z≠ w1+x≧ 4x+y>3x-y<41+1=2≦2