Java io流
Java io流
总览
1. 流的概念和作用
1.1 流的分类
1.1.1 根据数据流的方向分为:
- 输入流
- 输出流
1.1.2 根据处理数据单位的不同分为:
- 字节流
- 字符流
1.2 4个基本的抽象流类型
输入流 输出流
字节流 InputStream outputStream
字符流 Reader Writer
1.3 五类一接口
- File(文件特征与管理):File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。
- InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
- OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
- Reader(文件格式操作):抽象类,基于字符的输入操作。
- Writer(文件格式操作):抽象类,基于字符的输出操作。
2. 字节流
2.1 InputStream 字节输入流
- InputStream类是字节输入流的抽象类,是所有字节输入流的父类。
- InputStream的常用方法:
int available() 从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。
void close() 关闭此输入流并释放与流相关联的任何系统资源。
void mark(int readlimit) 标记此输入流中的当前位置。
boolean markSupported() 测试此输入流是否支持 mark和 reset方法。
abstract int read() 从输入流读取数据的下一个字节。
int read(byte[] b) 从输入流中读取一些字节数,并将它们存储到缓冲器阵列 b 。
int read(byte[] b, int off, int len) 从输入流读取最多 len个字节的数据到字节数组。
byte[] readAllBytes() 从输入流读取所有剩余字节。
int readNBytes(byte[] b, int off, int len) 将所请求的字节数从输入流读入给定的字节数组。
void reset() 将此流重新定位到最后在此输入流上调用 mark方法时的位置。
long skip(long n) 跳过并丢弃来自此输入流的 n字节的数据。
long transferTo(OutputStream out) 从该输入流中读取所有字节,并按读取的顺序将字节写入给定的输出流。
2.1.1 FileInputStream
- FileInputStream的构造方法:
FileInputStream(File file) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream(FileDescriptor fdObj) 通过使用文件描述符 fdObj创建 FileInputStream ,该文件描述符表示与文件系统中的实际文件的现有连接。
FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
- FileInputStream的方法列表:
int available() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close() 关闭此文件输入流并释放与流相关联的任何系统资源。
protected void finalize() 已过时。
finalize方法已被弃用。 为了执行清理而覆盖finalize子类应该修改为使用替代清理机制,并删除覆盖的finalize方法。 当覆盖finalize方法时,其实现必须明确确保按照super.finalize()所述调用super.finalize() 。 有关迁移选项的更多信息,请参阅Object.finalize()的规范。
FileChannel getChannel() 返回与此文件输入流相关联的唯一的FileChannel对象。
FileDescriptor getFD() 返回表示与此 FileInputStream正在使用的文件系统中的实际文件的连接的 FileDescriptor对象。
int read() 从该输入流读取一个字节的数据。
int read(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组。
int read(byte[] b, int off, int len) 从该输入流读取最多 len个字节的数据到字节数组。
long skip(long n) 跳过并从输入流中丢弃 n字节的数据。
2.2 OutPutStream 字节输出流
- OutputStream类是字节输出流的抽象类,是所有字节输出流的父类。
- OutputStream字节输出流的方法:
void close() 关闭此输出流并释放与此流相关联的任何系统资源。
void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。
void write(byte[] b) 将 b.length字节从指定的字节数组写入此输出流。
void write(byte[] b, int off, int len) 从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
abstract void write(int b) 将指定的字节写入此输出流。
2.2.1 FileOutputStream
- FileOutputStream的构造方法
FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(FileDescriptor fdObj) 创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。
FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。
FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。
- FileOutputStream的方法列表
void close() 关闭此文件输出流并释放与此流相关联的任何系统资源。
protected void finalize() 已过时。
finalize方法已被弃用。 为了执行清理,覆盖finalize子类应被修改为使用替代的清理机制,并删除覆盖的finalize方法。 当覆盖finalize方法时,其实现必须明确确保按照super.finalize()中所述调用super.finalize() 。 有关迁移选项的更多信息,请参阅Object.finalize()的规范。
FileChannel getChannel() 返回与此文件输出流相关联的唯一的FileChannel对象。
FileDescriptor getFD() 返回与此流相关联的文件描述符。
void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流。
void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量 off开始写入此文件输出流。
void write(int b) 将指定的字节写入此文件输出流。
3. 字符流
3.1 Reader 字符输入流
- Reader的方法列表
abstract void close() 关闭流并释放与之相关联的任何系统资源。
void mark(int readAheadLimit) 标记流中的当前位置。
boolean markSupported() 告诉这个流是否支持mark()操作。
int read() 读一个字符
int read(char[] cbuf) 将字符读入数组。
abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
int read(CharBuffer target) 尝试将字符读入指定的字符缓冲区。
boolean ready() 告诉这个流是否准备好被读取。
void reset() 重置流。
long skip(long n) 跳过字符
3.1.1 FileReader
- FileReader的构造方法
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
FileReader(FileDescriptor fd) 创建一个新的 FileReader ,给予 FileDescriptor从中读取。
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。
3.1.2 BufferedReader
- BufferedReader的构造方法
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。
- BufferedReader的方法列表
void close() 关闭流并释放与之相关联的任何系统资源。
Stream<String> lines() 返回一个 Stream ,其元素是从这个 BufferedReader读取的行。
void mark(int readAheadLimit) 标记流中的当前位置。
boolean markSupported() 告诉这个流是否支持mark()操作。
int read() 读一个字符
int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
String readLine() 读一行文字。
boolean ready() 告诉这个流是否准备好被读取。
void reset() 将流重置为最近的标记。
long skip(long n) 跳过字符
3.2 Writer 字符输出流
Writer是字符输出流的基类,Writer的主要方法:
Writer append(char c) 将指定的字符附加到此作者
Writer append(CharSequence csq) 将指定的字符序列附加到此作者
Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列附加到此作者
abstract void close() 关闭流,先刷新
abstract void flush() 刷新流
void write(char[] cbuf) 写入一个字符数组。
abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分
void write(int c) 写一个字符
void write(String str) 写一个字符串
void write(String str, int off, int len) 写一个字符串的一部分
3.2.1 FileWriter
- FileWriter的构造方法
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter
OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter
OutputStreamWriter(OutputStream out, Charset cs) 创建一个使用给定字符集的OutputStreamWriter
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建一个使用给定字符集编码器的OutputStreamWriter
- FileWriter的方法列表
Writer append(CharSequence csq) 将指定的字符序列附加到此作者。
Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列附加到此作者。
void close() 关闭流,先刷新。
void flush() 刷新流。
String getEncoding() 返回此流使用的字符编码的名称。
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write(int c) 写一个字符
void write(String str, int off, int len) 写一个字符串的一部分。
3.2.2 BufferedWriter
BufferedWriter 是缓冲字符输出流。它继承于Writer。
BufferedWriter 的作用是为其他字符输出流添加一些缓冲功能,使用BufferedWriter可以提高我们写入文件的效率。
- BufferedWriter的构造方法:
BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
- BufferedWriter的方法列表:
void close() 关闭流,先刷新。
void flush() 刷新流。
void newLine() 写一行行分隔符。
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write(int c) 写一个字符
void write(String s, int off, int len) 写一个字符串的一部分。
4. File类
File 是“文件”和“目录路径名”的抽象表示形式。
File 直接继承于Object,实现了Serializable接口和Comparable接口。实现Serializable接口,意味着File对象支持序列化操作。而实现Comparable接口,意味着File对象之间可以比较大小;File能直接被存储在有序集合(如TreeSet、TreeMap中)。
- File的构造方法:
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
- File的方法列表:
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。
int compareTo(File pathname) 比较两个抽象的路径名字典。
boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
static File createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。
static File createTempFile(String prefix, String suffix, File directory) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
boolean delete() 删除由此抽象路径名表示的文件或目录。
void deleteOnExit() 请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。
boolean equals(Object obj) 测试此抽象路径名与给定对象的相等性。
boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile() 返回此抽象路径名的规范形式。
String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。
long getFreeSpace() 通过此抽象路径名返回分区 named中未分配字节的数量。
String getName() 返回由此抽象路径名表示的文件或目录的名称。
String getParent() 返回此抽象路径名的父目录的路径名字符串,如果此路径名未命名为父目录,则返回 null 。
File getParentFile() 返回此抽象路径名的父目录的抽象路径名,如果此路径名不指定父目录,则返回 null 。
String getPath() 将此抽象路径名转换为路径名字符串。
long getTotalSpace() 通过此抽象路径名返回分区 named的大小。
long getUsableSpace() 通过此抽象路径名返回分区 named上此虚拟机可用的字节数。
int hashCode() 计算此抽象路径名的哈希码。
boolean isAbsolute() 测试这个抽象路径名是否是绝对的。
boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。
long lastModified() 返回此抽象路径名表示的文件上次修改的时间。
long length() 返回由此抽象路径名表示的文件的长度。
String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
static File[] listRoots() 列出可用的文件系统根。
boolean mkdir() 创建由此抽象路径名命名的目录。
boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
boolean renameTo(File dest) 重命名由此抽象路径名表示的文件。
boolean setExecutable(boolean executable) 为此抽象路径名设置所有者的执行权限的便利方法。
boolean setExecutable(boolean executable, boolean ownerOnly) 设置该抽象路径名的所有者或每个人的执行权限。
boolean setLastModified(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。
boolean setReadable(boolean readable) 一种方便的方法来设置所有者对此抽象路径名的读取权限。
boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。
boolean setReadOnly() 标记由此抽象路径名命名的文件或目录,以便只允许读取操作。
boolean setWritable(boolean writable) 一种方便的方法来设置所有者对此抽象路径名的写入权限。
boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。
Path toPath() 返回从此抽象路径构造的一个java.nio.file.Path对象。
String toString() 返回此抽象路径名的路径名字符串。
URI toURI() 构造一个表示此抽象路径名的 file: URI。
URL toURL() 已过时。 此方法不会自动转义URL中非法的字符。 建议在新的代码转换的抽象路径到URL通过先转换成URI,经由toURI方法,然后经由转换URI为URL URI.toURL方法。