黑马程序员——IO流学习笔记

来源:互联网 发布:网络电玩数据修改 编辑:程序博客网 时间:2024/06/08 20:12

------- android培训、java培训、期待与您交流! ----------

IO流


 

一、概念

流按操作数据分:字节流,字符流

按流向分为:输入流输出流

英文编码表:ASICCI码

汉子编码表:GB2312,扩容后GBK

国际标准码表:UNICODE,优化后变为utf-8;

字符流读取的时候用什么码表可以有我们自己指定,这样处理文字就变得很方便

所以处理文字用字符流方便,处理图片用字节流方便,通用字节流

四个流的基类:InputStream,OutputStream,Reader,Writer

所有的子类都以这四个类作为后缀名

二、字符流Reader.Writer

一般我们用FileWriter文件输出流

创建一个文件对象和一个FileWrter对象,该对象一初始化就要明确被操作的文件。

而且该文件被创建到指定的目录下,如果有同名文件,将会被覆盖,这步就是为了明确数据要存放的目的地

File file=new File("demo.txt");

     FileWriterfw=new FileWriter(file);

fw就是一个流,把类容写到fw这个流中

fw.write("abcde");

并且把流的数据写到文件中

fw.flush();或者用fw.close();

这些方式都是在使用Windows的资源

三、IO异常的处理

异常的标准处理如下

FileWriter fw=null;

      try {

//这里有可能产生文件找不到异常,和IO异常

        fw = new FileWriter("file.txt");

     fw.write("abc");

     } catch (IOException e) {

        e.printStackTrace();

     }finally{

      try {

//这里可能报空指针异常和IO异常

         if(fw!=null){

           fw.close();

        }

     } catch (IOException e) {

        e.printStackTrace();

     }

     }

四、文件的续写

在参数中传递true,那么表示文件可以续写,把新内容写到文件中去

fw = new FileWriter("file.txt",true);

        fw.write("哈哈");

在写入文件中换行的话,由\r\n表示换行

五、文件的读取

  FileReaderfr=new FileReader("file.txt");

   方式一、一次读一个字符

len=fr.read();

方式二、一次读取一个字符数组的字符

char[] c=newchar[4];

      int len=0;

      while((len=fr.read(c))!=-1){

        System.out.println(len);

     }

六、文件的拷贝

建立输入流和输出流

FileReader fr=new FileReader("file.txt");

     FileWriter fw=new FileWriter("copy.txt");

 

      char[] c=newchar[1024];

      int len=0;

读取文件

      while((len=fr.read(c))!=-1){

        fw.write(c,0,len);    }

关闭流

     fr.close();

     fw.close();

七、字符流缓冲区BufferedWriter,BufferedWriter

1、文件写入:

FileWriter fw=new FileWriter("copy.txt",true);

     BufferedWriter bw=new BufferedWriter(fw);

     bw.write("你好jiayou a");

     bw.close();关闭缓冲区就是关闭流,所以不用fw.close();

bw.newline();换行,可以跨平台,在windows和linux都是换行

   2、文件读取

FileReader fr=new FileReader("file.txt");

     BufferedReader buf=new BufferedReader(fr);

     String s=null;

文件的读取,readLine一次读取一行,方便对文本数据的获取,如果返回null表示文件读完

      while((s=buf.readLine())!=null){

        System.out.println(s);

     }

八、读取键盘输入

        System.out对应的标准输出设备,System.in对应的标准输入设备

从键盘读取输入流

InputStreamis=System.in;

      //定义一个缓冲区

     StringBuilder sb=new StringBuilder();

      while(true){对读取的字符判断,如果是换行,进行下面的判断

         int ch=is.read();

         if(ch=='\r')

            continue;

         if(ch=='\n'){如果是换行符,把缓冲区的变为字符串

           String s=sb.toString();

            if("over".equals(s)){如果字符串是over,那么程序结束

                break;

           }else{如果不是over,打印字符串,并且清空缓冲区

               System.out.println(s);

               sb.delete(0, sb.length());

           }

        }else{如果不是换行,把字符添加到缓冲区

           sb.append((char)ch);

        }

     }

九、转换流

InputStreamReader操作字节流的字符流对象,是字节流通向字符流的桥梁,可以把字节流转换为字符流

outputstreamwriter为把字符转换为字节的类

从键盘读取数据,

InputStreamis=System.in;

把字节流转换为字符流

     InputStreamReader isr=new InputStreamReader(is);

把字符流装进缓冲区

     BufferedReader bufr=new BufferedReader(isr);

     创建一个字节输出流

     OutputStream os=System.out;

把字符流转换为字节流输出

     OutputStreamWriter osw=new OutputStreamWriter(os);

创建一个字符流缓冲区

     BufferedWriter bufw=new BufferedWriter(osw);

     

     String s=null;

      while((s=bufr.readLine())!=null){

         if("over".equals(s))

            break;

         bufw.write(s);

         bufw.newLine();换行

     }

      bufw.close();

     bufr.close();

键盘输入合为一句

BufferedReader bufr=

new BufferedReader(newInputStreamReader(System.in))

BufferedWriterbufw=

new BufferedWriter

(newOutputStreamWriter(newFileOutputStream("file.txt")))

把键盘的输入写入文件:

OutputStreamos=newFileOutputStream("file.txt");

十.流操作规律

1、明确源和目的

   源:输入流inputstream,reader

   目的:输出流outputstream,writer

2、操作的是否纯文本

是:字符流

不是:字节流

3、当体系明确后,在明确要使用哪个具体的对象

通过设备来进行区分,

源设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台

十一、指定编码表

转换流可以指定编码表

BufferedWriterbufw=

new BufferedWriter

(newOutputStreamWriter

(newFileOutputStream("file.txt"),"utf-8"));在写的时候可以以utf-8的编码来存,读取也一样,对应的

 


0 0
原创粉丝点击