JavaIO总结

File文件操作类

  • File类是唯一一个与文件操作本身(创建、删除、取得信息)有关的程序类。
  • 实际项目部署环境可能与开发环境不同。
    Windows–“\”
    Unix–“/”
    所以在使用路径分隔符时都会采用File类的一个常量“separator”,例如:
  • File file = new File(File.separator + “Users” + File.separator + “9721” + File.separator + “Desktop”+File.separator + “TestIO.java”);


    目录操作
  • 取得父路径:getParent()
  • 取得符File对象:getParentFile()
  • 创建目录:mkdirs()


    取得文件信息:
  • 判断路径是否是文件:public boolean isFile()
  • 判断路径是否是目录:public boolean isDirectory()
  • 取得文件大小:public long length()
  • 最后一次修改日期:public long lastModiied()
  • 列出目录中的内容:listFiles()–这个方法本身只能够列出本目录中的第一级信息


    字节流与字符流

    File类不支持文件内容处理,如果要处理文件内容,必须要通过流的操作模式来完成。流 分为输入流和输出流。 在java.io包中,流分为两种:字节流与字符流
  • 字节流:InputStream、OutputStream
  • 字符流:Reader、Writer
  • 字节流与字符流的区别:字节流是原生的操作,而字符流是经过处理后的操作


    字节输出流(OutputStream)——–抽象类
  • OutputStream类实现了Closeable,Flushable两个接口
  • 由于OutputStream是一个抽象类,所以要想为父类实例化,就必须要使用子类。由于方法名称都由父类声明好 了,所以我们在此处只需要关系子类的构造方法。如果要进行文件的操作,可以使用FileOutputStream类来处理, 这个类的构造方法如下:
    接收File类(覆盖):public FileOutputStream(File file) throws FileNotFoundException
    接收File类(追加):public FileOutputStream(File file, boolean append


    AutoCloseable自动关闭支持
    • 从JDk1.7开始追加了一个AutoCloseable接口,这个接口的主要目的是自动进行关闭处理,但是这种处理一般不好 用,因为使用它必须结合try..catch

    字节输入流(InputStream)–抽象类
  • 只实现了Closeable接口
  • 提供的方法:
    1、读取数据到字节数组中,返回数据的读取个数。如果此时开辟的字节数组大小大于读取的数据大小,则返 回的就是读取个数;如果要读取的数据大于数组的内容,那么这个时候返回的就是数组长度;如果没有 数据了还在读,则返回-1: public int read(byte b[]) throws IOException.最常用方法
    2、读取部分数据到字节数组中,每次只读取传递数组的部分内容,如果读取满了则返回长度(len),如果没有 读取满则返回读取的数据个数,如果读取到后没有数据了返回-1:public int read(byte b[], int off, int len) throws IOException
    3、读取单个字节,每次读取一个字节的内容,直到没有数据了返回-1:public abstract int read() throws IOException;


    字符输出流(Writer)
    • 字符适合处理中文数据
    • 有Closeable,Flushable、Appendable接口

    字符输入流(Reader)
  • 在Reader类中没有方法可以直接读取字符串类 型,这个时候只能通过字符数组进行读取操作


    转换流

    转换流的基本操作
  • OutputStreamWriter:将字节输出流变为字符输出流(Writer对于文字的输出要比OutputStream方 便)
  • InputStreamReader:将字节输入流变为字符输入流(InputStream读取的是字节,不方便中文的处理)


    内存操作流程

  • 字节内存流:ByteArrayInputStream、ByteArrayOutputStream
  • 字符内存流:CharArrayReader、CharArrayWriter


    打印流

  • PrintStream、printWriter


    System类对IO的支持

  • 在System类中定义了三个操作的常量
    - 标准输出(显示器)
    - 错误输出
    - 标准输入(键盘)
  • 系统输出:
    - out:
    - System.out是PrintStream的实例化对象,而PrintStream又是OutputStream的子类,所以可以直接使用System.out直接为OutputStream实例化,这个时候的OutputStream输出的位置将变为屏幕
    - err

    • 系统输入in
      • System.in直接对应的InputStream

    两种输入流

    #BuffereReader类

    BufferedReader类属于一个缓冲的输入流,而且是一个字符流的操作对象。

  • 缓冲流:
    • 字节缓冲流:BufferedInputStream
    • 字符缓冲流:BufferedReader
  • 创建BufferedReader的基本语法:
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  • 从BufferedReader对象读取一个字符要使用read()方法
  • 对象序列化指的是:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将其保存在文本中
    • 序列化接口:Serializable

读写文件

FileInputStream
  • 该留用于从文件读取数据,他的对象可以用关键字new来创建
  • 可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
    InputStream f = new FileInputStream(“C:/java/hello”);
  • 也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:
    File f = new File(“C:/java/hello”);
    InputStream out = new FileInputStream(f);
FileOutputStream
  • 该类用来创建一个文件并向文件中写数据。
  • 使用字符串类型的文件名来创建一个输出流对象:
    OutputStream f = new FileOutputStream(“C:/java/hello”)
  • 也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
    File f = new File(“C:/java/hello”);
    OutputStream f = new FileOutputStream(f);

JavaIO总结