IO流的分类和功能
按照方向可以分为:输入流(读)、输出流(写)
按照类型可以分为:字节类(任何文件)、字符流(纯文本文件)
对应到代码当中:
字节输入流:InputStream FileInputStream
字节输出流:OutputStream FileOutputStream
字符输入流:Reader FileReader
字符输出流:Writer FileWriter
字节输出流写出数据到文件
OutputStream out = new FileOutputStream("文件路径");
OutputStream常用的方法:
public void write(int b):写单个字节
public void write(byte[] buf):写整个字节数组
public void write(byte[] buf, int offset, int length):写字节数组的一部分
public voic close():关闭流
FileOutputStream构造方法:
public FileOutputStream(String filename):参数代表文件路径
public FileOutputStream(String filename, boolean append):第二个参数代表是否追加写。
public FileOutputStream(File file):参数代表文件对象
public FileOutputStream(File file, boolean append)::第二个参数代表是否追加写。
字节输入流读取数据到程序
InputStream i = new FileInputStream("文件路径");
InputStream常用的方法:
public int read():读取单个字节
public int read(byte[] buf):读取字节数组,返回有效个数。
public void close():关闭流
FileInputStream构造方法:
public FileInputStream(String filename):参数代表文件路径
public FileInputStream(File file):参数代表文件对象
读取数据read(byte[])方法的原理
byte[] buf = new byte[2];
int len;
while ((len = in.read(buf)) != -1) {
// 有效部分
}
字节流完成文件的复制
1. 单个字节的方式:大约86秒钟
2. 字节数组的方式:大约0.3秒钟
FileWriter写数据到文件
Writer writer = new FileWriter("文件路径")、
FileWriter中关闭和刷新方法的区别
1. 刷新是flush方法:立刻清空缓冲区,将数据交给操作系统。
2. 关闭是close方法:内部其实已经包含了一个flush动作,额外再关闭。
注意:flush方法调用之后,仍然还可以继续这个流;但是close方法一旦调用关闭了流,这个流不能再继续了。
FileWriter写数据的5个方法
Writer当中的常用方法:
public void write(int ch):写单个字符
public void write(char[] buf):写整个字符数组
public void write(char[] buf, int offset, int length):写字符数组的一部分
public void write(String str):写整个字符串
public void write(String str, int offset, int length):写字符串的一部分
public voic close():关闭流
FileWriter构造方法:
public FileWriter(…) // 和刚才4个一样
FileWriter写数据实现换行和追加写
Windows的换行是:\r\n(这是两个字符)
Linux/macOS的换行是:\n
FileReader读数据
int ch;
while ((ch = reader.read()) != -1) {
// …
}
FileReader读数据一次一个字符数组
char[] buf = new char[size];
int len;
while ((len = reader.read(buf)) != -1) {
// 字符数组的有效部分
}
Properties的load方法加载文件中配置信息
Properties props = new Properties();
FileReader fr = new FileReader("配置文件的路径");
props.load(fr);
fr.close();
// props中的内容了,基本和Map一样。