Java尺度I/O常识体系图:



1、I/O是什么?
I/O 是Input/Output(输入、输出)的简称,输入流可以领略为向内存输入,输出流是从内存输出。
2、流
流是一个持续的数据流,可以从流中读取数据,也可以往流中写数据。流与数据源,或数据源流向的前言相关联。
在Java IO流中,流可以是字节约,也可以是字符流。
3、Java I/O 用途与对应的流一览

注:粗体为节点流。蓝色为转换流(字节约转为字符流)。
4、流的处理惩罚
流分节点流和处理惩罚流两种。
节点流:可以从或向一个特定的处所(节点)读写数据。如FileInputStream、FileReader。
处理惩罚流:是对一个已存在的流的毗连和封装,通过所封装的流的成果挪用实现数据读写。如BufferedReader.处理惩罚流的结构要领老是要带一个其他的流工具做参数。一个流工具颠末其他流的多次包装,称为流的链接
5、文件会见
(1)读取文件
假如你需要在差异端利用读取文件,你可以按照你要读的文件是二进制文件照旧文本文件,可能按照你要处理惩罚的数据是筹备采纳字节方法照旧字符方法,抉择利用 FileInputStream 可能 FileReader。两者支持你从文件开头开始到文件末了读取一个字节可能字符,也可以将读取的多个字节或字符,写入到内存的字节数组或字符数组。
单字节读取文件示例:
public static void readFileAsByte() throws IOException {
String filepath = "file.bin";
java.io.InputStream is = null;
try {
is = new FileInputStream(filepath);
int data = -1;
while ((data = is.read()) != -1) {// -1 暗示读取达到文件末了
//操纵数据
System.out.print((byte)data + " ");
}
} finally {
if (is != null) {
is.close();// 封锁流
}
}
}
字节数组读取文件示例:
public static void readFileAsByteArray() throws IOException {
String filepath = "file.bin";
java.io.InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(filepath));// 组装BufferedInputStream流,插手缓冲本领
byte[] data = new byte[256];
int len = -1;
while ((len = is.read(data)) != -1) {// -1 暗示读取达到文件末了
//操纵数据
for (int i = 0; i < len; i++) {
System.out.print(data[i] + " ");
}
}
} finally {
if (is != null) {
is.close();// 封锁流
}
}
}
单字符读取文件示例:
public static void readFileAsChar() throws IOException {
String filepath = "file.txt";
java.io.Reader r = null;
try {
r = new FileReader(filepath);
int data = -1;
while ((data = r.read()) != -1) {// -1 暗示读取达到文件末了
//操纵数据
System.out.print((char) data);
}
} finally {
if (r != null) {
r.close();// 封锁流
}
}
}
字符数组读取文件示例:
public static void readFileAsCharArray() throws IOException {
String filepath = "file.txt";
java.io.Reader r = null;
try {
r = new BufferedReader(new FileReader(filepath));// 组装BufferedReader流,插手缓冲本领
char[] data = new char[256];
int len = -1;
while ((len = r.read(data)) != -1) {// -1 暗示读取达到文件末了
//操纵数据
for (int i = 0; i < len; i++) {
System.out.print(data[i]);
}
}
} finally {
if (r != null) {
r.close();// 封锁流
}
}
}
(2)写入文件
与读取文件雷同:
假如你需要在差异端利用写入文件,你可以按照你要写的文件是二进制文件照旧文本文件,可能按照你要处理惩罚的数据是筹备采纳字节方法照旧字符方法,抉择利用 FileOutputStream 可能 FileWriter。两者支持你可以一次写入一个字节可能字符到文件中,也可以直接写入一个字节数组可能字符数据。数据凭据写入的顺序存储在文件傍边。
单字节写入文件示例:
public static void writeFileAsByte() throws IOException {
String filepath = "file.bin";
java.io.OutputStream os = null;
try {
os = new FileOutputStream(filepath);
os.write('1');
os.write('2');
os.write('3');
os.write('4');
os.flush();// 把缓冲区内的数据刷新到磁盘
} finally {
if (os != null) {
os.close();// 封锁流
}
}
}