IO字符流

来源:互联网 发布:帝国cms图片集分割 编辑:程序博客网 时间:2024/04/30 04:34


 

 

.字符流

         1.字符流是什么

                   字符流是可以直接读写字符的IO

                   字节流只能读写字节.如果要读取字符,就要先读取到字节数据,然后转为字符.如果要写出字符,需要把字符转为字节再写出.   

         2.FileReader,FileWriter

         FileReader类的read()方法可以按照字符大小读取

       1、循环读出里面的字符

     

 FileReader fr =new FileReader("aaa.txt");int ch;while((ch = fr.read())!=-1){System.out.print((char)ch);}fr.close();        FileWriter fw = new FileWriter("bbb.txt");fw.write("fighting,努力,123,%%^&");fw.close();


;

         FileWriter类的write()方法可以自动把字符转为字节写出

      

  实现读写操作:

   方式一

  

FileReader fr = new FileReader("aaa.txt");FileWriter fw = new FileWriter("bbb.txt");int ch;while ((ch = fr.read())!=-1){fw.write(ch);}fr.close();fw.close();


 

  方式二

   

 FileReader fr = new FileReader("day21笔记.txt");    FileWriter fw = new FileWriter("copy.txt");     char [] arr = new char[1024];    int len;    while((len = fr.read(arr))!=-1){    fw.write(arr,0,len);


 

  方式三

   

BufferedReader  br = new BufferedReader(new FileReader("day21笔记.txt"));BufferedWriter  bw = new BufferedWriter(new FileWriter("copy.txt"));int len;while((len = br.read())!=-1){bw.write(len);}br.close();bw.close();


 

         3.什么情况下使用字符流

                   字符流也可以拷贝文本文件,但不推荐使用.因为读取时会把字节转为字符,写出时还要把字符转回字节.(拷贝文件的时候建议使用字节流)

字符流作用:

    1、只读因为通过编码表按照一个字符一个字符的读取,不会出现半个中文。

    2、只写可以直接写出字符串

                   程序需要读取一段文本,或者需要写出一段文本的时候可以使用字符流

         4.带缓冲的字符流

                   BufferedReaderread()方法读取字符时会一次读取若干字符到缓冲区,然后逐个返回给程序,降低读取文件的次数,提高效率

                   BufferedWriterwrite()方法写出字符时会先写到缓冲区,缓冲区写满时才会写到文件,降低写文件的次数,提高效率

写满空间的时候调用flush()方法,close()关闭流之前调用flash刷新剩下的数据;

                   BufferedReaderreadLine()方法可以读取一行字符(不包含换行符号)

                   BufferedWriternewLine()可以输出一个跨平台的换行符号"\r\n"

BufferedReader  br = new BufferedReader(new FileReader("day21笔记.txt"));BufferedWriter  bw = new BufferedWriter(new FileWriter("copy.txt"));String str;while((str = br.readLine())!=null){bw.write(str);//bw.write("\r\n");bw.newLine();}

 

         5.LineNumberReader

                   LineNumberReaderBufferedReader的子类,具有相同的功能,并且可以统计行号

                   调用getLineNumber()方法可以获取当前行号

                   调用setLineNumber()方法可以设置当前行号

         6.使用指定的码表读取字符

                   FileReader是使用默认码表读取文件,如果需要使用指定码表读取,那么可以使用InputStreamReader(字节流,编码表)

                   FileWriter是使用默认码表写出文件,如果需要使用指定码表写出,那么可以使用OutputStreamWriter(字节流,编码表)

 

.今日重点

         1.会用BufferedReader读取GBK码表和UTF-8码表的字符

         2.会用BufferedWriter写出字符到GBK码表和UTF-8码表的文件中

         3.会使用BufferedReader从键盘读取一行

         4.会用字节数组拷贝文件,会用BufferedInputStreamBufferedOutputStream拷贝文件

 

flush close的区别

1flash方法可以将缓冲区的数据刷到文件上,调用之后还可以继续调用写的方法

2close方法可以关闭流,在关闭流之前会将缓冲区的中的有效字符刷出来,然后在关闭,如果不关闭就不能再调用写的方

 

使用流对象尽量使晚开早关

 

* 设计模式之装饰设计模式  //实现包装 */public static void main(String[] args) {Student s = new Student();// 学生类开始有的功能s.code();ItcastStudent is = new ItcastStudent(new Student());is.code(); //学生包装后的功能}}interface Coder {public void code();}class Student implements Coder {@Overridepublic void code() {System.out.println("javase");System.out.println("javaweb");}}class ItcastStudent implements Coder {private Student s;public ItcastStudent(Student s) {this.s = s;}@Overridepublic void code() {s.code();System.out.println("ssh");System.out.println("安卓");System.out.println("ios");System.out.println("数据库");System.out.println("............");}}



 

0 0
原创粉丝点击