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<=3
y+z!=w
1+x>=4
x+y>3
x-y<4
1+1=2
!2
运行的结果是:当前目录下的math_ttt.txt文件中有以下内容:
x+y≦ 3
y+z≠ w
1+x≧ 4
x+y>3
x-y<4
1+1=2
≦2