java学习ing——初识IO流

之前是学习到了有关文件的操作,主要是对文件进行创建删除查找搜索等等。~现在就可以对文件进行一些简单的操作了。比如读和写~

      这里所说的IO流就是对应的InputStream和OutputStream。分别是字节输入流和字节输出流。我觉得这里有一处容易混淆的是呢 InputStream字节输入流可能我们在字面理解输入就是往文件里输入么?但。。恰恰相反。这里的流的源头是文件,所以输入是从文件往外,而 OutputStream输出流才是向文件方向的。。刚开始接触感觉好容易弄混的。多多练习敲敲代码就ok啦。

 

下面总结一下这个IO流的简单的使用:

<span style="font-size: medium;">public static void copyFile(){  
    try {  
        //实例化一个InputStream对象  
        InputStream is = new FileInputStream("src/IOStream.java");  
        //实例化一个数组,长度为文件的长度  
        byte array[] = new byte[is.available()];  
        //进行read操作,并将结果存入array数组中  
        is.read(array);  
        //实例化一个OutputStream对象  
        OutputStream os = new FileOutputStream("src/IOFileTest.txt");  
          
        os.write(array);  
              
        System.out.println("文件拷贝成功");  
        is.close();  
        os.close();  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}</span>

       上面一段代码就是对InputStream和OutputStream的一个简单的操作,功能相当于文件的拷贝。

      感觉有几个需要注意的地方。首先~~查看API就会知道我们使用的InputStream和OutputStream都是抽象类,Abstract Class。因为抽象类无法实例化,所以我们是通过FileInputStream和FleOutputStream这两个子类来进行实例化的。还有就是 进行读写的时候,也可以采用另一种方法,就是一个字节一个字节的读和写~~那样的话,代码会比这种的多~~所以木有采用。

      其他都很简单的,执行这一段代码之后的效果就是在src下面又生成了一个Txt文件,内容就是与这段代码相同的~~

 

    所说的都是字节输入输出流。还有一种就是过滤流(结点流):BufferedInputStream和BufferedOutputStream。这个与 字节流不同的是在执行的时候会创建一个缓冲区,在读取的时候是要先存入这个缓冲区,当缓冲区存满之后在讲所有字节读取出去。这种方法与字节流那一个字节一 个字节的传输在效率上肯定有所提高。

      代码的实现,与字节流很相似的~~只有些许的不同:

首先,我们看下API,BufferedInputStream和 BufferedOutputStream这两个类的构造方法,都是要传一个InputStream或者OutputStream流的参数的,所以再实例 化的时候还是要先实例化一个字节输入输出流的对象,再作为参数传给缓冲流的实例化。

      其次使用缓冲流的时候还要用到另一个方法: flush()。他的作用是刷新缓冲流。就是命令缓冲区的字节内容写入到输出流中,如果使用缓冲流的时候木有调用这个方法,那么在所要拷贝的文档中是看不到任何内容的。~~


你可能感兴趣的:(java学习ing——初识IO流)