IO流一些基本内容(日后补充)

来源:互联网 发布:知乎回答如何取消匿名 编辑:程序博客网 时间:2024/06/10 02:22

根据流的流向分类:

        Input:输入流 从磁盘到java程序中

        Output:输出流  从java程序到磁盘中

注意:输入输出全是根据  java程序   而言的

    根据流操作的数据来分类

        字符流: 操作字符

            只能操作普通文本文件,

                最常见的文本文件:.txt,.java,.c,.cpp等其他语言的源代码

                只要用文本工具(记事本,notepad++,editplus)可以打开的 ,而且打开后我们人类能看懂的 都是文本文件

                注意:我们用的.doc,excel,ppt这些不是文本文件

 

        字节流: 操作字节

            能操作一切文件(文本文件,.mp3,视频.avi,.rmvb,mp4,doc,excel,ppt)

 java中的四大流:

        字符输入流:共同父类 Reader   比如:FileReader,BufferedReader

                功能:读取一个字符,读取一个字符数组

 

        字符输出流:共同的父类 Writer    比如:FileWriterBufferedWriter

                功能:写一个字符,写一个字符数组(一部分),写一个字符串

 

        字节输入流:共同父类InputStream  比如:FileInputStream,BufferedInputStream

                功能:读取一个字节,读取一个字节数组

   

        字节输出流:共同父类 OutputStream比如:FileOutputStream,BufferedOutputStream

                功能:写一个字节,写一个字节数组(一部分)

 

        总结2条规律:

            只要是输入流   此流的方法名一定叫做 read

            只要是输出流  此流的方法名一定叫做 write

 

            java中流的命名是十分规范的:

                    功能+父类的名字

 2.字节流:

        FileInputStream :

            读取数据方法: read

                publicint read();

            标准代码

                intb = 0;

                while((b=fis.read())!=-1){

                    syso((char)b);

                }

                publicint read(byte[] bs);

            标准代码

                byte[]bs = new byte[1024];

                intlen = 0;

                while((len=fis.read(bs))!=-1){

                    Strings = new String(bs,0,len);

                    syso(s);

                }

       

        FileOutputStream:方法名write

                publicvoid write(int b)//一次写一个字节

                publicvoid write(byte[] bs)//一次写一个字节数组

                publicvoid write(byte[] bs,int startIndex,int len)//一次写一个字节数组的一部分

                   

        缓冲流:

            BufferedOutputStream:基于FileOutputStream

            BufferedInputStream:基于FileInputStream

一般步骤

1、创建对象

1.1写操作

public FileOutputStream(String filename,boolean flag);                  //flag 为ture时是续写,不写默认是不续写、

FileOutputStream fos = FileOutputStream(路径)

1.创建了一个文件字节输出流对象

2.如果文件不存在,会自动创建一个

     3.fos这流 指向该文件

 

1.2 读操作

FileInputStream fis = newFileInputStream("D:\\txt");

 * 1.创建了 文件字节输入流对象

      * 2.检测文件是否存在,如果不存在 直接抛出异常

      * 3.fis输入流对象 指向该文件

2、读写操作

2.1、写操作:

运用String方法中的.getBytes方法 可以将字符串转换成Byte[]

byte[] bs ="这是一句例子".getBytes();

fos.write(bs);

       2.2、读操作

         1、一个字节一个字节读

int b = 0;//用来保存每次读取到的码值

                   /*

                    * 1.fis.read():先读

                    * 2.b=fis.read():赋值

                    * 3.b!=-1:判断

                    */

                   while((b=fis.read())!=-1){

                            //如果读取到了东西

                            System.out.println((char)b);   // b为int类型数据 需强制类型转换为char

                   }

2、     一个数组读

byte[] bs = new byte[4]; //创建一个byte数组存放字节 实际开发中建议写1024或其倍数

                   intlen = 0;

                   /*(len= fis.read(bs))!=-1做了三件事

                    *1.fis.read(bs):先读

                    *2.len = fis.read(bs):赋值

                    *3.len!=-1:判断

                    */

                   //标准代码

                   while((len= fis.read(bs))!=-1){

                            //实际读取到了 len个,读取到的数据保存在bs中

                            System.out.print(newString(bs,0,len));  //运用了String的byte[]构造方法,取出第0个索引到len的长度之间的内容

                   }

 

 

3、       关闭流!

3.1 写操作

 

 fos.close();

 

3.2 读操作

Fis.close();

原创粉丝点击