字符输入流

来源:互联网 发布:eia数据公布 时间 编辑:程序博客网 时间:2024/06/06 09:48

多数字符输入类都与字符输出类相对应

1 Reader类

所有字符输入流类从Reader类继承的方法

read()  读一个字符,返回int值

read(char[] array) 读字符填充array,返回所读字节数int类型

 

2 FileReader类

FileReader类不能指定编码类型,它默认的编码方式为开发环境的编码方式。比如用Myeclipse开发java ,如果不指定Myeclipse中编码方式则默认为系统编码方式(win7为GBK),FileReader对象的编码方式就是GBK;如果指定Myeclipse中编码方式为UTF-8,那么FileReader对象的编码方式就是UTF-8。(java中得到编码方式 System.getProperty("file.encoding"))//用FileReader读文件时,文件编码方式必须和FileReader对象的相同,否则会出现乱码。

   String dirName = "d:/";
   String fileName = "test.txt";

   Reader reader = new FileReader(new File(dirName, fileName));//打开文件字符输入流  
   //使用while循环读流中的数据,读到末尾返回-1
   int value;
   while(!((value=reader.read())==-1)){
    System.out.print((char)value);
   }

 

 


 

 

3 PushbackReader类 (推回Reader)

两个构造函数:

PushbackReader(Read in);具有单字符缓冲区

PushbackReader(Read in,int size);具有指定大小的缓冲区

 

test1.txt内容为:1a2ab3abc4abcd5abcde     数字为紧跟每个数字后边的字符的长度

 通过PushbackReader读取内容,内容不包括数字

   String dirName="d:/test/";
   String fileName="test1.txt";
   File myFile=new File(dirName,fileName);
   

   PushbackReader in=new PushbackReader(new BufferedReader(new FileReader(myFile)));
   int c;
   while(true){
    String number=""; //the length
    while(Character.isDigit((char)(c=in.read()))){
     number+=(char)c;//第二次循环  2
     System.out.println("number:"+number+"     c值:"+(char)c);
    }
    if(c==-1){//到最后跳出循环
     break;
    }else{
     System.out.println("c值:"+((char)c));
     in.unread(c);//如果不是数字读回到流    第一次循环:a  第二次:a(为了保证能读到这个在上边while循环中的数没被忽略)
     System.out.println("unread:"+(char)c);
    }
    char[] values=new char[Integer.parseInt(number)];//将number个字符读到字符数组  第一次循环:1个
    in.read(values);
    System.out.println(values);//输出字符数组
   }
   
   in.close();

原创粉丝点击