Java I/O 总结

Java I/O 是Java中最基础的资源读取,是从序列化资源中获取存储的信息并将该种信息转化成内存中的信息,然后将内存信息传输到别的资源之中。

Java I/O总共有6个重要的对象, InputStream, OutputStream, Reader, Writer, File和Serializable。分别对应了字节输入/输出流, 字符输入/输出流,文件类,序列化。

Imgur

输入/输出字节流

  1. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。 Imgur
    public abstract int read() throws IOException; //从资源中读取下一个字节,如果EOF,则返回-1.
    public int read(byte b[]) throws IOException {  //从资源文件中读取字节,并将取出的字节写入字节数组。
     return read(b, 0, b.length);
    }
    public int read(byte b[], int off, int len) throws IOException;//从资源中读取,给出起始位置和字节数。
    
  2. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。 Imgur
    public abstract void write(int b) throws IOException; //和InputStream类似,将一个字节写入输出流,写进资源文件。
    public void write(byte b[]) throws IOException {  //将一个字节数组写入输出流。
    write(b, 0, b.length);
    }
    public void write(byte b[], int off, int len) throws IOException //将一个字节数组,从某个offset开始,写出len个字节。
    public void flush() throws IOException; //刷新当前的输出流。
    public void close() throws IOException; //关闭当前的输出流。
    
  3. 通过InputStream和OutputStream从文件中读取字节,并且将字节写入一个新的文件。
    public static void main(String[] args) throws IOException {
     File f = new File("./src/leetcode/RegexTest.java");
     File fout = new File("./copy.text");
     InputStream in = null;
     OutputStream out = null;
     try {
         in = new FileInputStream(f);  //打开一个输入流
         out = new FileOutputStream(fout); //打开一个输出流
         byte[] b = new byte[1024];
         while(in.read(b) != -1){  //直到读到EOF,将所有的信息都读入字节数组。
             out.write(b); //将字节数组写到输出流。
         }
     } catch (IOException e) {
         out.flush();  //刷新最后的输出流
         in.close(); //关闭输出流
     }
    }
    

输入/输出字符流

  1. Reader(文件格式操作):抽象类,基于字符的输入操作。 Imgur
    public int read() throws IOException; //从资源中读取一个char字符,读出的结果是int型,我们可以通过强转获得char变量。
    public int read(char cbuf[]) throws IOException { //从资源中读出char数组。
     return read(cbuf, 0, cbuf.length);
    }
    abstract public int read(char cbuf[], int off, int len) throws IOException;
    
  2. Writer(文件格式操作):抽象类,基于字符的输出操作。 Imgur
    public void write(int c) throws IOException; //将一个char写入输出流。
    public void write(char cbuf[]) throws IOException { //将char数组写入输出流。
     write(cbuf, 0, cbuf.length);
    }
    abstract public void write(char cbuf[], int off, int len) throws IOException;
    
  3. 通过Reader将资源读取出来,并通过Writer将资源写入另一个文件。
    public void copyTo(String filename ) throws IOException {
     Reader reader = null;
     Writer writer = null;
     try {
         reader = new FileReader(new File("./big.txt"));
         writer = new FileWriter(new File(filename));
         char[] b = new char[1024];  //和Stream不同,承载数据的是char[]而不是byte[].
         while(reader.read(b) != -1){
             writer.write(b);
         }
     }finally {
         writer.flush();
         reader.close();
         writer.close();
     }
    }
    

非流式文件类–File类

File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。获取文件描述符。

public boolean exists( ) // 判断文件或目录是否存在
public boolean isFile( ) // 判断是文件还是目录
public boolean isDirectory( ) // 判断是文件还是目录
public String getName( ) // 返回文件名或目录名
public String getPath( ) // 返回文件或目录的路径。
public long length( ) // 获取文件的长度
public String[ ] list ( ) // 将目录中所有文件名保存在字符串数组中返回。
// File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:
public boolean renameTo( File newFile );  //  重命名文件
public void delete( );  // 删除文件
public boolean mkdir( ); // 创建目录

Reference

  1. 深入理解Java中的IO