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