Java IO详解

415 阅读1分钟

一、按操作方式分

Reader-字符读取

  • 节点流
    • FileReader
    • PipedReader
    • CharArrayReader
  • 处理流
    • BufferedReader 
    • InputStreamReader 

Writer-字符写出

  • 节点流
    • FileWriter
    • PipedWriter
    • CharArrayWriter
  • 处理流
    • BufferedWriter 
    • OutputStreamWriter 
    • PrintWriter

InputStream-字节读取

  • 节点流
    • FileInputStream
    • PipedInputStream
    • ByteArrayInputStream
  • 处理流
    • BufferedInputStream 
    • DataInputStream 
    • ObjectInputStream 
    • SequenceInputStream

OutputStream-字节写出

  • 节点流
    • FileOutputStream
    • PipedOutputStream
    • ByteArrayOutputStream
  • 处理流
    • BufferedOutputStream 
    • DataOutputStream 
    • ObjectOutputStream
    • PrintStream

节点流:可以从或向一个特定的地方(节点)读写数据。
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。

二、按操作对象分类

缓冲操作:BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 
基本数据类型操作:DataInputStream DataOutputStream 
对象序列化操作:ObjectInputStream ObjectOutputStream
转化控制:InputStreamReader OutputStreamWriter 
打印控制:PrintWriter PrintStream
文件操作:FileReader FileWriter FileInputStream FileInputStream
管道操作:PipedReader PipedWriter PipedInputStream PipedOutputStream
数组操作:ByteArrayInputStream ByteArrayOutputStream CharArrayWriter  CharArrayReader

个人遇到最常用的场景,就是文件处理了

1.普通文件复制,复制mesh到mesh2

File inputFile = new File("D:\\file\\mesh.txt");

File outFile = new File("D:\\file\\mesh2.txt");

FileInputStream fileInputStream = new FileInputStream(inputFile);

FileOutputStream fileOutputStream = new FileOutputStream(outFile);

byte[] bytes = new byte[1024]; //每次读的字节

int len=0;

while((len=fileInputStream.read(bytes))!=-1){

    fileOutputStream.write(bytes,0,len);

}

fileOutputStream.close();

fileInputStream.close();

2.缓冲流方式处理

File inputFile = new File("D:\\file\\mesh.txt");

File outFile = new File("D:\\file\\mesh2.txt");

FileInputStream fileInputStream = new FileInputStream(inputFile);

FileOutputStream fileOutputStream = new FileOutputStream(outFile);

BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

byte[] bytes = new byte[1024]; //每次读的字节

int len=0;

while((len=bufferedInputStream.read(bytes))!=-1){

    bufferedOutputStream.write(bytes,0,len);

}

bufferedOutputStream.close();

bufferedInputStream.close();

fileOutputStream.close();

fileInputStream.close();