• Java IO 节点流 FileInput/OutputStream


    Java IO 节点流 FileInput/OutputStream

    @author ixenos

     

     

    节点流之 文件流


    文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容

    1.文件的读写工作流程:

    1)打开文件输入流或输出流

      FileInputStream实现读文件,调用FileInputStream的构造器可以打开一个文件输入流:

    1 public FileInputStream(String fileName) throws FileNotFoundException //指定文件名
    2 public FileInputStream(File file) throws FileNotFoundException //指定一个File对象
    3 public FileInputStream(FileDescriptor fdObj) //需要一个文件描述符对象

      FileDescriptor http://www.fengfly.com/plus/view-214059-1.html

      如果试图在一个不存在的文件上打开一个文件输入流,该构造器将抛出异常FileNotFoundException,是IOException的子类

      最常用:通过文件名打开一个文件输出流 try{FileInputStream fin = new FileInputStream("Readme.txt");} catch(IOException e) {...}

    2)文件读或写操作

      FileInputStream

    1 public native int read() throws IOException
    2 public int read(byte[] data) throws IOException
    3 public int read(byte[] data, int offset, int length) throws IOException

      如果由于某种原因文件不可读,read方法将抛出IOException

    3)关闭文件输入流或输出流

    复制代码
     1  ...
     2  finally{
     3      try{
     4          //由于在finally模块,如果文件不存在,也就没有流,所以要有一个空指针判断
     5          if(fin != null){
     6               fin.close();
     7           } 
     8      }catch(Exception e){}
     9  }
    10  ...  
    11 -------------------------------
    12 由于close()也可能产生异常,代码较为冗杂
    13 可以使用try-with-resources来自动关闭流 http://www.cnblogs.com/ixenos/p/5701679.html
    复制代码

    4)FileInputStream对应的FileOutputStream实现了文件输出功能

    1 public FileOutputStream(String name) throws FileNotFoundException
    2 public FileOutputStream(String name, boolean append) throws FileNotFoundException

    (1)调用第一个构造器时,如果name指定的文件不存在,将创建该文件,并同时建立一个输出流;如果存在,那么文件的内容将被覆盖

    (2)调用第二个构造器时,通过第二个参数append指定是否对已存在的文件覆盖,如果append为true,那么将在文件尾端添加新内容,如果为false,则覆盖文件内容 

    (3)FileOutputStream的构造器可以创建一个新文件的同时,打开一个输出流进行写入,这是File对象的createNewFile()比不了的

    write
    public void write(byte[] b)
               throws IOException
        将 b.length 个字节从指定的 byte 数组写入此输出流。write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同。 
    
    参数:
    b - 数据。 
    抛出: 
    IOException - 如果发生 I/O 错误。
    API-write1
    write
    public void write(byte[] b,
                      int off,
                      int len)
               throws IOException
        将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。write(b, off, len) 的常规协定是:将数组 b 中的某些字节按顺序写入输出流;元素 b[off] 是此操作写入的第一个字节,b[off+len-1] 是此操作写入的最后一个字节。 
        OutputStream 的 write 方法对每个要写出的字节调用一个参数的 write 方法。建议子类重写此方法并提供更有效的实现。 
    
    如果 b 为 null,则抛出 NullPointerException。 
    
    如果 off 为负,或 len 为负,或者 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。 
    
    
    参数:
    b - 数据。
    off - 数据中的初始偏移量。
    len - 要写入的字节数。 
    
    API-OutputStream-write
    API-write
  • 相关阅读:
    VS2013 此模板尝试加载组件程序集”NuGet.VisualStudio.interop,Version=1.0.0.0 的解决办法
    备份集中的数据库备份与现有的xx数据库不同”解决方法
    Couchbase 集群小实践
    EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)
    Vue个人笔记
    [转载] HashMap的工作原理-hashcode和equals的区别
    用VS Code写C#
    MongoDB学习笔记一:MongoDB基础
    Vue学习笔记十三:Vue+Bootstrap+vue-resource从接口获取数据库数据
    Vue学习笔记十二:vue-resource的基本使用
  • 原文地址:https://www.cnblogs.com/ixenos/p/5729530.html
Copyright © 2020-2023  润新知