Java-IO概述

Java IO概述

Java IO是一套提供输入输出(读写数据)功能的API,提供了java.io 包

Java IO的构成概述

java.io包中主要包括了五个类和一个接口:

  • File:文件类,用于文件的管理
  • InputStream:字节输入流类,二进制格式操作,基于字节的输入,是所有字节输入流类的父类
  • OutputStream:字节输出流类,二进制格式操作,基于字节的输出,是所有字节输出流类的父类
  • Reader:字符输入流类,文件格式操作,基于字符的输入操作,是所有字符输入流类的父类
  • Writer:字符输出流类,文件格式操作,基于字符的输出操作,是所有字符输入流类的父类
  • RandomAccessFile:可以在文件的任意位置进行存取操作

  • Serializable:

下面是一张通过输入、输出、基于字节或者字符、以及其他比如缓冲、解析之类的特定用途划分的大部分Java IO类的表格

Java IO关注的是从原始数据源读取数据输出原始数据到目标介质 ,主要的数据源和目标介质有

  • 文件
  • 管道
    Java中的管道是为运行在同一个JVM中的两个线程提供通信能力
    在Java中使用管道时,通信的双方应该是运行在同一进程中的不同线程
  • 网络连接
  • 内存缓存
  • System.in,System.out,System.error(Java标准的输入输出)

一个程序需要InputStream或者Reader从数据源读取数据,需要OutputStream或者Writer将数据写入到目标媒介中

Java IO的分类

根据数据流向:

  • 输入流-读取数据
  • 输出流-写数据

根据处理的数据类型:

  • 字节流:数据流中最小的数据单元是字节
  • 字符流:数据流中最小的数据单元是字符,Java中的字符是Unicode编码,一个字符占用两个字节,因为数据编码的不同,而有了对字符进行高效操作的流对象,本质其实就是基于字节流读取时,去查了指定的码表。

注解:

  • 采用数据流的目的是使输入输出独立于设备,不用关心设备
  • 对于程序来说,输出流是往存储介质或数据通道写入数据,而输入流是从存储介质或数据通道中读取数据
  • 只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流

File类-文件管理

File类用于管理文件的类,包括创建文件,删除文件,获取文件路径、文件名等,做判断过滤等功能

构造方法

public File(String pathname)    通过将给定的路径名字符串转换为抽象路径名来创建新的File实例        
public File(String parent,String child)     从父路径名字符串和子路径名字符串创建新的File实例        
public File(File parent,String child)    从父抽象路径名和子路径名字符串创建新的File实例

成员方法:

创建功能:
    public boolean createNewFile() throws IOException  当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件
    public boolean mkdir()          创建文件夹
    public boolean mkdirs()  创建由此抽象路径名命名的目录,包括任何必需但不存在的父目
删除功能:
    public boolean delete()    删除由此抽象路径名表示的文件或目录
重命名:
    public boolean renameTo(File dest)
判断:
    public boolean isDirectory()    判断是否是目录
    public boolean isFile()    判断是否是文件
    public boolean exists()    判断是否存在
    public boolean canRead()    判断是否可读
    public boolean canWrite()    判断是否可写
    public boolean isHidden()    判断是否隐藏
获取:
    public String getAbsolutePath() 获取绝对路径
    public String getPath()    获取相对路径
    public String getName()   获取名称        
    public long length()    获取长度,字节数
    public long lastModified()    获取最后一次修改时间
    public String[] list()    获取指定目录下所有文件夹或文件名称的数组
    public File[] listFiles()    获取指定目录下所有文件夹或文件的File的数组
文件名称过滤器FilenameFilter 
    public String[] list(FilenameFilter filter)
     public File[] listFiles(FilenameFilter filter) 

字节流

InputStream

  • InputStream
    • FileInputStream
    • BufferedInputStream