java输入与输出(I/O)(二):常见输入输出流小结

来源:互联网 发布:河北农业大学网络课 编辑:程序博客网 时间:2024/06/07 02:42

过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。

节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。

FileInputStream和FileOutputStream,节点流,用于从文件中读取或往文件中写入字节流。

BufferedInputStream和BufferedOutputStream,过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。

DataInputStream和DataOutputStream,多字节输入输出流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。

PipedInputStream和PipedOutputStream,管道流,用于线程间的通信。

1) 过滤输入输出流FilterInputStream、FilterOutputStream的使用

        File f=new File("d:\\filetest\\1.txt");        FileInputStream fis=new FileInputStream(f);        FilterInputStream filter=new        FilterInputStream(fis);        for(int i=0;i<f.length();i++)        {            System.out.print(filter.read());        }        fis.close();

        先创建节点输入流 FileInputStream,接着在节点流的基础上创建过滤输入流,进行读操作,循环输出。最后关闭节点输入流。同样过滤输出流也是一样创建,采用写操作。

2)DataOutputStream多字节输出流使用举例

 File f=new File("C:\\Users\\Administrator\\Desktop\\filetest\\1.txt"); FileOutputStream fos=new FileOutputStream(f);                DataOutputStream dos=new DataOutputStream(fos);                      try        {        dos.writeUTF("你项目完成了吗?");        dos.writeUTF("还没有");        dos.writeUTF("那还不加紧完成");        dos.writeUTF("知道了");        }        catch(Exception e)        {}        dos.close();                                                    }

        在创建节点流基础上创建多字节输出流对象fos,通过写操作将多个字节数据写入创建的文件之中。DataInputStream多字节输入流同理使用,只不过是采用read操作。

3) 字符输入输出流 InputStreamReader OutputStreamWriter

File f=new  File("C:\\Users\\Administrator\\Desktop\\filetest\\1.txt"); FileInputStream fis=new FileInputStream(f);                 InputStreamReader isr=new InputStreamReader(fis);            char st=(char)isr.read();                                   System.out.println(st);

        字符输入流对象的创建前提条件是创建文件输入流。实现读取创建文件的字符数据并循环输出。字符输出流使用流程与字符输入流类同。

4) 带输出缓冲的输入输出流 BufferedReader、BufferedWriter

        FileInputStream fis=new FileInputStream(f);                      InputStreamReader isr=new InputStreamReader(fis);                BufferedReader br=new BufferedReader(isr);                       System.out.println(br.readLine());                               System.out.println(br.readLine());        fis.close();

        创建一个输入流对象fis,并且以f作为参数创建一个字符输入流对象isr,再以fis作为参数创建一个带缓冲的输入流对象,利用此对象读取一行数据。

5) 以输出输入流对象参数对方法进行设计

public void read1(BufferedReader br) {        try {             System.out.println(br.readLine());        } catch (Exception e) {        }public void write1(String str, BufferedWriter bw) {        if (str.length() > 5) {            try {                bw.write(str);                bw.newLine();                bw.flush();            } catch (Exception e) {            }        } else if ((str.length()) < 5) {            try {                bw.write("输入有误!");                bw.newLine();                bw.flush();            } catch (Exception e) {            }        }

        java在使用流时,都会有一个缓冲区,按一种它认为比较高效的方法来发数据:把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发。而flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满。下面给出主main的测试代码:

FileInputStream fis = new FileInputStream(f);OutputStreamWriter osw = new OutputStreamWriter(fos);InputStreamReader isr = new InputStreamReader(fis);BufferedWriter bw = new BufferedWriter(osw);BufferedReader br = new BufferedReader(isr);f2.write1("欢迎你来到北京", bw);f2.write1("你说是吗", bw);f2.write1("我觉得你说得有点道理", bw);f2.write1("我也是这么想的啊", bw);f2.read1(br);f2.read1(br);f2.read1(br);f2.read1(br);br.close();bw.close();

更多的文件IO操作还是需要多实践,才能有更深的理解。

1 0
原创粉丝点击