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

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

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

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

        先创建节点输入流 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操作还是需要多实践,才能有更深的理解。

你可能感兴趣的:(Java)