[08][01][01] Java I/O流

I/O是什么

I/O 指的是输入/输出(Input/Output),在 Java 中 I/O 操作主要是指使用 Java 进行输入和输出操作

I/O分类

IO可以按照数据处理方式分为以下两类

  • 流 I/O:传输过程是以字节流形式进行的,这样的设备是不需要缓冲机制的,简单易用但效率较低
  • 块 I/O:把数据打包成块进行传输,传输基本单位为块,传输过程中需要缓冲区(buffer)支持,读写也是以块作为基本单位,效率很高但编程比较复杂

数据流

数据流是一串连续不断的数据的集合,数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流

对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据

不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的

数据流可以分为两类(以内存为判断标准)

  • 输入流:从外界读取数据写入内存
  • 输出流:从内存中读取数据到外界

I/O体系结构

整个 java.io 包中最重要的就是五个类和一个接口

  • 五个类:File、OutputStream、InputStream、Writer、Reader
  • 一个接口:Serializable

I/O结构体系

在学习过重很容易混淆,分不清是字节流还是字符流,看每个类的最后这个单词,如果是 Stream 的话就是字节流,如果是 Reader/Writer 的话就是字符流

Java 中字符是采用 Unicode 标准,一个字符是16位,即一个字符使用两个字节来表示,Java 中引入了处理字符的流

字节流

输入字节流

InputStream

InputStream 为字节输入流,它本身为一个抽象类,必须依靠其子类实现各种功能,是所有字节输入流类的超类

继承自 InputStream 的流都是向程序中输入数据的,且数据单位为字节(8bit)

Inputstream类中的常用方法

读取一个 byte 的数据,返回值是高位补0int 类型值。若返回值= -1说明没有读取到任何字节读取工作结束
public abstract int read()

读取 b.length 个字节的数据放到b数组中,返回值是读取的字节数
public int read(byte b[]) 

从输入流中最多读取 len 个字节的数据,存放到偏移量为off的b数组中
public int read(byte b[], int off, int len)
   
返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果 InputStream 对象调用这个方法的话,它只会返回0,这个方法必须由继承 InputStream 类的子类对象调用才有用
public int available()
   
忽略输入流中的 n 个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
public long skip(long n) 
   
我们在使用完后,必须对我们打开的流进行关闭
public int close()

FileInputStream

FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。

在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。

作用:以文件作为数据输入源的数据流。或者说是打开文件,从文件读数据到内存的类

输出字节流

字符流

输入字符流

输出字符流

非流类

RandomAccessFile

从文件的任意位置进行存取(输入输出)操作

File

File类提供了描述文件和目录的操作与管理方法,主要用于命名文件、查询文件属性和处理文件目录

  • File中常用方法
public boolean exists() 判断文件或目录是否存在

public boolean isFile() 判断是文件还是目录

public boolean isDirectory() 判断是文件还是目录

public String getName() 返回文件名或目录名

public String getPath() 返回文件或目录的路径

public long length() 获取文件的长度

public String[] list() 将目录中所有文件名和目录名保存在字符串数组中返回

public File[] listFiles() 返回某个目录下所有文件和目录的绝对路径,返回的是File数组

public String getAbsolutePath() 返回文件或目录的绝对路径

public boolean renameTo(File newFile) 重命名文件
 
public void delete() 删除文件
 
public boolean mkdir() 创建目录
 
public boolean createNewFile() 创建文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章