Java IO

JAVA IO

    • java.io.InputStream
    • java.io.OutputStream
    • java将流分为两类:节点流与处理流
  • 文件流
    • java.io.FileOutputStream
      • 构造器
      • 方法
    • java.io.FileInputStream
      • 构造器
      • 方法
  • 文件复制
    • 块读写
      • InputStream定义了块读的方法
      • OutputStream定义了块写的方法
  • 写出/入文本数据
    • String提供了将字符串转换为一组字节的方法
  • 读取文本数据
    • String的构造器提供了对字节解码为字符串的操作

java将输入与输出比喻为"流",Stream
以同一个方向顺序移动的过程,流动的是字节(2进制)
IO中有输入流和输出流之分

java.io.InputStream

所有字节输入流的超类

  • int read()
    读取一个字节,以int形式返回,该int值的"低八位"有效,若返回值为-1则表示EOF
  • int read(byte[] data)
    块读取,尝试最多读取给定数组的length个字节并存入该数组,返回值为实际读取到的字节量

java.io.OutputStream

所有字节输出流的超类

  • void write(int d)
    写出一个字节,写的是给定的int的"低八位"
  • void write(byte[] data)
    块写,将给定的字节数组中的所有字节全部写出
  • void write(byte[] data,int offset,int len)
    块写,将给定的字节数组中从offset处开始的连续len个字节一次性写出

java将流分为两类:节点流与处理流

  • 节点流:也称为低级流
    节点流的另一端是明确的,是实际读写数据的流,读写一定是建立在节点流基础上进行的.
  • 处理流:也称为高级流
    处理流不能独立存在,必须连接在其他流上,目的是当数据流经当前流时对数据进行加工处理来简化我们对数据的该操作

文件流

是连接我们的程序与文件之间的管道,用来读写文件字节数据的流
文件流是继承自InputStreamOutputStream

java.io.FileOutputStream

使用文件输出流向文件中写入字节数据

构造器

覆盖模式是指若指定的文件存在,文件流在创建时会先将该文件原内容清除

  • FileOutputStream(String pathname)
    创建文件输出流对指定的path路径表示的文件进行写操作,如果该文件不存在则将其创建出来
  • FileOutputStream(File file)
    创建文件输出流对指定的File对象表示的文件进行写操作,如果该文件不存在则将其创建出来
    但是如果该文件所在的目录不存在会抛出异
    常:java.io.FileNotFoundException

追加模式是指若指定的文件存在,文件流会将写出的数据陆续追加到文件中

  • FileOutputStream(String pathname,boolean append)
    如果第二个参数为true则为追加模式,
    false则为覆盖模式
  • FileOutputStream(File file,boolean append)
    同上

方法

  • void write(int d)
    用来向文件中写入1个字节
    会将给定的int值对应的2进制的"低八位"写出

  • void write(byte[] data)
    向文件中块写数据。将数组data中所有字节一次性写入文件

  • void write(byte[] data,int off,int len)
    向文件中块写数据。将数组data中从下标off开始的连续len个字节一次性写入文件

  • close()
    当IO操作完后要关闭

java.io.FileInputStream

使用文件输入流向从文件中读取字节数据

构造器

  • FileInputStream(String path)
    基于给定的路径对应的文件创建文件输入流
    如果指定的文件不存在则会抛出异常java.io.FileNotFoundException
  • FileInputStream(File file)
    基于给定的File对象所表示的文件创建文件输入流
    如果File表示的文件不存在则会抛出
    异常java.io.IOException

方法

  • int read()
    读取1个字节,以int形式返回该字节内容。int值只有"低八位"有数据,高24位 全部补0
    如果返回的int值为整数-1,则表示EOF; EOF:end of file 文件末尾
  • int read(byte[] data)
    块读数据,从文件中一次性读取给定的data数组总长度的字节量并从数组第一 个元素位置开始存入数组中。返回值为实际读取到的字节数。如果返回值为整数-1则表示读取到了文件末尾
  • close()

文件复制

  • 复制文件的原理就是使用文件输入流从原文件中陆续读取出每一个字节,然后再使用文件输出流将字节
    陆续写入到另一个文件中完成的;
  • 循环进行读取直到某次 fileInputStream.read() 方法返回值为-1,表示读取到了文件末尾,那么就不再写出即可

块读写

效率问题

  • 上述案例在复制文件时的读写效率是很低的。因为硬盘的特性,决定着硬盘的读写效率差,而单字节读
    写就是在频繁调用硬盘的读写,从而产生了"木桶效应"。
  • 为了解决这个问题,我们可以采取使用块读写的方式来复制文件,减少硬盘的实际读写的次数,从而提
    高效率。

InputStream定义了块读的方法

块读: 一次性读取一组字节的方式

  • int read(byte[] data)
    一次性读取给定字节数组总长度的字节量并存入到该数组中。 返回值为实际读取到的字节数。如果返回值为-1表示本次没有读取到任何字节已经是流的末尾了

OutputStream定义了块写的方法

块写: 一次性写出一组字节的方式

  • void write(byte[] data)
    一次性将给定数组中所有字节写出
  • void write(byte[] data,int offset,int len)
    一次性将data数组中从下标offset处开始的连续len个字节一次性写出
    提高每次读写的数据量减少读写次数,可以提高读写效率

写出/入文本数据

文件中只能保存2进制信息,因此我们要想写出文本数据,需要先将字符串转换为2进制。

String提供了将字符串转换为一组字节的方法

  • byte[] getBytes(charset cs)
    将当前字符串按照指定的字符集转换为一组字节

读取文本数据

先将文件中的字节读取出来,然后再将这些字节按照对应的字符集转换为字符串即可

String的构造器提供了对字节解码为字符串的操作

  • String(byte[] data,charset cn)
    将data数组中的所有字节按照指定的字符集转换为字符串

你可能感兴趣的:(JAVA语法,java)