字节流
字节流可以理解为写入和读取时是以文档字节为单位进行操作的,所以字节流可以对所有文件进行操作,是万能的。
关于输入和输出,并不是常规意义上的输入和输出,常规意义上,输入为写入,输出为读取,但是在IO流中,相反,输出为写入,输入为读取。
字节输入流
字节输入流的总抽象方法,其余子类通过对其方法进行重写使得功能得到进一步的完善。
成员方法
| Modifier and Type |
Method and Description |
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字节的数据到一个字节数组。 |
void |
reset() 将此流重新定位到上次在此输入流上调用 mark方法时的位置。 |
long |
skip(long n) 跳过并丢弃来自此输入流的 n字节数据。 |
注意:read(byte[] b, int off, int len)以为以数组byte[] b为框,框中的第off个字符开始,进行len长度的读取
两个具体子类
InputStream中的具体子类很多,本次仅详细说明两个
主要用于对当前系统中的文件进行读取
构造器
| Constructor and Description |
FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。 |
FileInputStream(FileDescriptor fdObj) 创建 FileInputStream通过使用文件描述符 fdObj ,其表示在文件系统中的现有连接到一个实际的文件。 |
FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。 |
成员方法
| Modifier and Type |
Method and Description |
int |
available() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 |
void |
close() 关闭此文件输入流并释放与流相关联的任何系统资源。 |
protected void |
finalize() 确保当这个文件输入流的 close方法没有更多的引用时被调用。 |
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字节的数据。 |
FileInputStream为其父类,创造出一个缓存区,将文件中的数据放至缓存区进行操作,这样可以不用每次在文件底层中操作
构造器
| Constructor and Description |
BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。 |
BufferedInputStream(InputStream in, int size) 创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。 |
成员方法
| Modifier and Type |
Method and Description |
int |
available() 返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 |
void |
close() 关闭此输入流并释放与流相关联的任何系统资源。 |
void |
mark(int readlimit) 见的总承包 mark的方法 InputStream 。 |
boolean |
markSupported() 测试这个输入流是否支持 mark和 reset方法。 |
int |
read() 见 read法 InputStream的一般合同。 |
int |
read(byte[] b, int off, int len) 从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。 |
void |
reset() 见 reset法 InputStream的一般合同。 |
long |
skip(long n) 见 skip法 InputStream的一般合同。 |
字节输出流
抽象基类OutputStream
成员方法
| Modifier and Type |
Method and Description |
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) 将指定的字节写入此输出流。 |
两个具体子类
FileOutputStream
对系统中的文件进行写入
构造器
| Constructor and Description |
FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。 |
FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。 |
FileOutputStream(FileDescriptor fdObj) 创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。 |
FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。 |
FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。 |
注意:其中两个方法中的append即为是否在文件中进行追加操作
成员方法
| Modifier and Type |
Method and Description |
void |
close() 关闭此文件输出流并释放与此流相关联的任何系统资源。 |
protected void |
finalize() 清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法。 |
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) 将指定的字节写入此文件输出流。 |
BufferedOutputStream
继承于FileOutStream,与BufferedInputStream相对应
构造器
| Constructor and Description |
BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 |
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。 |
成员方法
| Modifier and Type |
Method and Description |
void |
flush() 刷新缓冲输出流。 |
void |
write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。 |
void |
write(int b) 将指定的字节写入缓冲的输出流。 |
文件复制
单字节复制
public void singleCopy(FileInputStream in, FileOutputStream out) throws IOException {
int readData;
while((readData = in.read()) != -1){
out.write(readData);
}
}
多字节复制(字节数组复制)
public void bytesArrayCopy(FileInputStream in, FileOutputStream out) throws IOException{
byte[] bytes = new byte[1024];
int readCount;
while((readCount = in.read(bytes))!= -1){
out.write(bytes);
}
}
字符流
字符流专门操作文本文档
字符流的本质:字节流+编码表
字符输入流
抽象基类Reader
构造器
| Modifier |
Constructor and Description |
protected |
Reader() 创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。 |
protected |
Reader(Object lock) 创建一个新的字符流阅读器,其关键部分将在给定对象上同步。 |
成员方法
| Modifier and Type |
Method and Description |
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) 跳过字符 |
具体子类
IntputStreamReader转换流
读取字节,并且可以通过指定的字符集来对字符进行解码,相当于字节流到字符流的桥梁,如果不指定字符集则采用默认字符集
构造器
| Constructor and Description |
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 |
InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的InputStreamReader。 |
InputStreamReader(InputStream in, CharsetDecoder dec) 创建一个使用给定字符集解码器的InputStreamReader。 |
InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。 |
成员方法
| Modifier and Type |
Method and Description |
void |
close() 关闭流并释放与之相关联的任何系统资源。 |
String |
getEncoding() 返回此流使用的字符编码的名称。 |
int |
read() 读一个字符 |
int |
read(char[] cbuf, int offset, int length) 将字符读入数组的一部分。 |
boolean |
ready() 告诉这个流是否准备好被读取。 |
FileReader简化流
构造器
| Constructor and Description |
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。 |
FileReader(FileDescriptor fd) 创建一个新的 FileReader ,给定 FileDescriptor读取。 |
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。 |
BufferedReader
构造器
| Constructor and Description |
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。 |
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。 |
成员方法
| Modifier and Type |
Method and Description |
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) 跳过字符 |
字符输出流
抽象基类Writer
构造器
| Modifier |
Constructor and Description |
protected |
Writer() 创建一个新的人物流作家,其关键部分将在作者本身上同步。 |
protected |
Writer(Object lock) 创建一个新的字符流写入器,其关键部分将在给定对象上进行同步。 |
成员方法
| Modifier and Type |
Method and Description |
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) 写一个字符串的一部分。 |
具体子类
OutputStreamWriter
构造器
| Constructor and Description |
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, Charset cs) 创建一个使用给定字符集的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建一个使用给定字符集编码器的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。 |
成员方法
| Modifier and Type |
Method and Description |
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) 写一个字符串的一部分。 |
FileWriter
构造器
| Constructor and Description |
FileWriter(File file) 给一个File对象构造一个FileWriter对象。 |
FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象。 |
FileWriter(FileDescriptor fd) 构造与文件描述符关联的FileWriter对象。 |
FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。 |
FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。 |
BufferedWriter
构造器
| Constructor and Description |
BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。 |
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。 |
成员方法
| Modifier and Type |
Method and Description |
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) 写一个字符串的一部分。 |
其他流
数据流
数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入
构造器
| Constructor and Description |
DataInputStream(InputStream in) 创建使用指定的底层InputStream的DataInputStream。 |
DataOuputStream数据输出流
构造器
| Constructor and Description |
DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。 |
打印流
打印流没有输入流,只有字节输出和字符输出,输出时可以指定字符集输出
PrintStream字节打印流
构造器
| Constructor and Description |
PrintStream(File file) 使用指定的文件创建一个新的打印流,而不需要自动换行。 |
PrintStream(File file, String csn) 使用指定的文件和字符集创建新的打印流,而不需要自动换行。 |
PrintStream(OutputStream out) 创建一个新的打印流。 |
PrintStream(OutputStream out, boolean autoFlush) 创建一个新的打印流。 |
PrintStream(OutputStream out, boolean autoFlush, String encoding) 创建一个新的打印流。 |
PrintStream(String fileName) 使用指定的文件名创建新的打印流,无需自动换行。 |
PrintStream(String fileName, String csn) 创建一个新的打印流,不需要自动换行,具有指定的文件名和字符集。 |
PrintWriter
构造器
| Constructor and Description |
PrintWriter(File file) 使用指定的文件创建一个新的PrintWriter,而不需要自动的线路刷新。 |
PrintWriter(File file, String csn) 使用指定的文件和字符集创建一个新的PrintWriter,而不需要自动进行线条刷新。 |
PrintWriter(OutputStream out) 从现有的OutputStream创建一个新的PrintWriter,而不需要自动线路刷新。 |
PrintWriter(OutputStream out, boolean autoFlush) 从现有的OutputStream创建一个新的PrintWriter。 |
PrintWriter(String fileName) 使用指定的文件名创建一个新的PrintWriter,而不需要自动执行行刷新。 |
PrintWriter(String fileName, String csn) 使用指定的文件名和字符集创建一个新的PrintWriter,而不需要自动线路刷新。 |
PrintWriter(Writer out) 创建一个新的PrintWriter,没有自动线冲洗。 |
PrintWriter(Writer out, boolean autoFlush) 创建一个新的PrintWriter。 |
对象流
对象流可以把对象写入文档中,因此读取的时候也可以完全按着对象读出来而不用其他转换操作,因此很方便
ObjectOutputStream序列化流
构造器
| Modifier |
Constructor and Description |
protected |
ObjectOutputStream() 为完全重新实现ObjectOutputStream的子类提供一种方法,不必分配刚刚被ObjectOutputStream实现使用的私有数据。 |
|
ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream。 |
构造器
| Constructor and Description |
ObjectInstance(ObjectName objectName, String className) 允许在给定对象名称和完整的类名称(包括包名称)的情况下创建对象实例。 |
ObjectInstance(String objectName, String className) 允许创建对象实例,并提供对象名称和完整类名称(包括包名称)的字符串表示形式。 |