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();// 封锁流 } } }