黑马程序员:Java基础总结----字符流Reader&Writer

黑马程序员:Java基础总结



字符流Reader&Writer

  ASP.Net+Android+IO开发 .Net培训 、期待与您交流!




字符流

字符流两个基类:
Reader Writer


类 Writer 方法

 Writerappend(char c)
          将指定字符添加到此 writer。
abstract voidclose()
          关闭此流,但要先刷新它。
abstract voidflush()
          刷新该流的缓冲。
 voidwrite(String str)
          写入字符串。

              //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
              //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
              //其实该步就是在明确数据要存放的目的地。
            FileWriter fw =  new  FileWriter( "demo.txt"  );

              //调用write方法,将字符串写入到流中。
            fw .write( "abcde" );

              //刷新流对象中的缓冲中的数据。
              //将数据刷到目的地中。
            //fw. flush();


              //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
              //将数据刷到目的地中。
              //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
            fw. close();

类 FileWriter

FileWriter(String fileName, boolean append)
          根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
FileWriter(File file, boolean append)
          根据给定的 File 对象构造一个 FileWriter 对象。

              //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
             FileWriter fw =  new  FileWriter( "demo.txt" , true  );

            fw.write(  "nihao\r\nxiexie" );

            fw.close()

类 BufferedWriter

BufferedWriter(Writer out)
          创建一个使用默认大小输出缓冲区的缓冲字符输出流。

缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要先有流对象。

该缓冲区中提供了一个跨平台的换行符。
newLine();
voidnewLine()
          写入一个行分隔符。
      BufferedReader bufr =  null  ;
            BufferedWriter bufw =  null ;

              try
            {
                  bufr =  new  BufferedReader( new  FileReader( "BufferedWriterDemo.java"  ));
                  bufw =  new  BufferedWriter( new  FileWriter( "bufWriter_Copy.txt"  ));

                  String line =  null ;

                    while ((line=bufr.readLine())!= null )
                  {
                        bufw.write(line);
                        bufw.newLine();
                        bufw.flush();

                  }
            }

类 Reader 方法

 intread()
          读取单个字符。如果已到达流的末尾,则返回 -1 
abstract intread(char[] cbuf, int off, int len)
          将字符读入数组的某一部分。

类 FileReader

构造同FileWriter,方法同Reader,

             FileWriter fw =  null ;
            FileReader fr =  null ;
              try
            {
                  fw =  new  FileWriter( "SystemDemo_copy.txt" );
                  fr =  new  FileReader( "SystemDemo.java" );

                    char [] buf =  new  char [1024];//提高效率

                    int  len = 0;
                    while ((len=fr.read(buf))!=-1)
                  {
                        fw.write(buf,0,len);
                  }
            }

类 BufferedReader

BufferedReader(Reader in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。
当返回null时,表示读到文件末尾。
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。 (windows中回车是\r\n)
StringreadLine()
          读取一个文本行。包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 

      String line =  null  ;

              while ((line=bufr.readLine())!= null )
            {
                  System.out.print(line);
            }

类 LineNumberReader  extends BufferedReader

特有方法:
 intgetLineNumber()
          获得当前行号。
 voidsetLineNumber(int lineNumber)
          设置当前行号。

默认情况下,行编号从 0 开始。该行号随数据读取在每个 行结束符处递增,并且可以通过调用  setLineNumber(int) 更改行号。但要注意的是, setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由  getLineNumber() 返回的值。

下面模拟了这一过程

import  java.io.*;

class  MyLineNumberReader {
        private  Reader  r  ;
        private  int  lineNumber  ;

      MyLineNumberReader(Reader r) {
              this . r  = r;
      }

        public  String myReadLine()  throws  IOException {

              lineNumber ++;
            StringBuilder sb =  new  StringBuilder();

              int  ch = 0;

              while  ((ch =  r  .read()) != -1) {
                    if  (ch ==  '\r'  )
                          continue ;
                    if  (ch ==  '\n'  )
                          return  sb.toString();
                    else
                        sb.append((  char ) ch);
            }
              if  (sb.length() != 0)
                    return  sb.toString();
              return  null  ;
      }

        public  void  setLineNumber( int  lineNumber) {
              this . lineNumber  = lineNumber;
      }

        public  int  getLineNumber() {
              return  lineNumber  ;
      }

        public  void  myClose()  throws  IOException {
              r .close();
      }
}

public  class  Ts {
        public  static  void  main(String[] args)  throws  IOException {
            FileReader fr =  new  FileReader( "copyTextByBuf.java"  );
            MyLineNumberReader mylnr =  new  MyLineNumberReader(fr);
            String line =  null ;
            mylnr.setLineNumber(100);
              while  ((line = mylnr.myReadLine()) !=  null ) {
                  System.  out .println(mylnr.getLineNumber() +  "::"  + line);
            }
            mylnr.myClose();
      }
}









  ASP.Net+Android+IO开发 .Net培训 、期待与您交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值