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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

字符流的由来:
字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。在对这个文字进行操作。
简单说:字节流+编码表 。

字节流的两个顶层父类:1,InputStream  2,OutputStream.字符流的两个顶层父类:1,Reader 2,Writer这些体系的子类都以父类名作为后缀。 而且子类名的前缀就是该对象的功能。

FileReaderFileWriter
新建对象new FileWriter()/new FileReader(),读/写rend()/write(),关闭close()。
写文件新建对象带true参数支持续写。读文件文件不存在会报异常。
read()参数支持 (空),字符流读取,返回单字符int。
                 (字符数组),把文件内容一次读入到数组,返回成功读取的字符数,然后在文件结尾处返回-1
                 (字符数组,int offset,int length),可以控制写在数组哪里,最多读取多少个字符。
                 (CharBuffer),返回成功放入CharBuffer中的字符数
write()参数支持 (int),字符流写入。
                (字符数组),字符数组写入
                (字符数组,int offset,int length),可以控制数组哪里开始写入,最多读取多少个字符。
                (String),字符串写入
                (String,int offset,int length),可以控制数组哪里开始写入,最多读取多少个字符。
FileReader(用的是字符流)FileReader fr=new FileReader("c:\\test.txt"); //文件不存在抛出异常IOExceptionint ch=0;//fr.read()会自动逐字符读取,返回一个字符。while((ch=fr.read())!=-1){       System.out.println((char)ch);}fr.close();会抛出IOException。必须检查。要么直接在调用方法后throws IOException,要么直接try-catch。还可以使用read(char[]) 把字符全部读入数组,返回成功读取的字符数。到结尾处再返回-1。char[] buf = new char[1024];int len = 0;
while((len=fr.read(buf))!=-1){                     System.out.println(new String(buf,0,len));//把字符数组后面的空格去了            }输出 hello world
FileWriter
fw=new FileWriter("c:\\test.txt");//创建一个FileWriter对象,可带true参数。作用是续写文件(不覆盖)
fw.write("test hello world");//将字符串写入到流中fw.close();//刷新流对象中的缓冲中的数据到目的地中,然后关闭流资源也可手动调用 fw.flush();刷新流对象中的缓冲中的数据到目的地中。会抛出IOException。必须检查。要么直接在调用方法后throws IOException,要么直接try-catch。public static void main(String[] args) throws IOException{                       FileWriter fw=null;              try{                     fw=new FileWriter("c:\\test.txt");                       fw.write("test hello world");            }catch(IOException io){                  io.printStackTrace();            }finally{                        if(fw!=null){                            try{                                     fw.close();                              }catch(IOException io){                                  throw new RuntimeException("关闭失败");                              }                                                 }               }                                                                  }字符流的缓冲区缓冲区的出现提高了对数据的读写效率。特点:缓冲区要结合流才可以使用,在创建缓冲区之前,必须要有流对象。在流的基础上对流的功能进行了增强。BufferedWriter:  write();   newLine();  BufferedReader:  readLine();BufferedReader步骤1.创建一个字符写入流对象FileReader fr=new FileReader ("a.txt");2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数BufferedReader bufr=new BufferedReader (fr);3.读取流对象:该缓冲区提供了一个一次读取一行的方法。当返回null时表示,文件读到末尾String line=null;while((line=bufr.readLine())!=null){String s=line;}4.关闭bufr.close();readLine()方法的原理:无论是读一行,获取多个字符,最终都是在硬盘上一个一个读取,最终使用额还是read方法一次读一个的方法。BUfferedWriter步骤:1.创建一个字符写入流对象FileWriter fw=new FileWriter("a.txt");2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数bufferedWriter bufw=new BufferedWriter(fw);buff.write("asdasdas");bufw.newLine();//换行符,跨平台的3.将缓冲区刷新bufw.flush;4.关闭缓冲区,就是在关闭缓冲区中的流对象bufw.close();自己实现readLine()方法    public String myReadLine() throws IOException{                    StringBuilder sb = new StringBuilder();                   int ch = 0;              while((ch = myRead())!=-1){                                       if(ch=='\r')                             continue;                        if(ch=='\n')                             return sb.toString();                    //将从缓冲区中读到的字符,存储到缓存行数据的缓冲区中。                     sb.append((char)ch);                              }                             if(sb.length()!=0)                       return sb.toString();            return null;   }



2 个回复

倒序浏览
学习了。。。哈哈
回复 使用道具 举报
学习了,顶
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马