IO流的分类和功能
按照方向分:输入流(读),输出流(写)
按照种类:字节流(任何文件),字符流(纯文本文件)
字节输入流 InputStream FileInputStream
字节输出流 OutputStream FileOutStream
字符输入流 Reader FileReader
字符输出流Writer FileWriter
使用字节输出流写出数据到文件
创建:OutputStream ops = new FileOutputStream("文件路径")
OutputStream常用方法:
public void write(int b):写单个字节
public void write(byte[] buf):写整个字节数组
public void write(byte[] buf, int offset,int length):写字节数组的一部分
public void close():关闭流.
FileOutputStream构造方法:
public FileOutputStream(String filename):参数是文件路径名
public FileOutputStream(String filename,boolean append):第二个参数达标是否追加
public FileOutputStream(File file):参数是文件对象
public FileOutputStream(File file,boolean append):第二个参数达标是否追加
使用字节输入流读取数据到程序
创建:InputStrean in = 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[])方法的原理
FileInputStream in = new FileInputStream("文件路径")
byte[] buf = new byte[size] // 缓冲数组
int len; // 有效个数
while((len = in.read(buf)) != -1){
// 使用字节数组有效部分
}
使用字节流完成文件的复制
通过字节数组的方式复制
使用FileWriter写数据到文件
创建:Wirter writer = new FileWriter("文件路径")
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 void close():关闭流
FileWriter构造方法:
public FileWriter(String filename):参数是文件路径名
public FileWriter(String filename, boolean append):第二个参数代表是否追加写。
public FileWriter(File file):参数是文件对象。
public FileWriter(File file, boolean append):第二个参数代表是否追加写。
FileWriter中关闭和刷新方法的区别
1. flush刷新方法:立刻清空缓冲区,后面还能继续用流。
2. close关闭方法:包含一个flush动作,一旦关闭,后面不能继续用流了。
写数据:write --> JVM当中的缓冲区 --> 满了自动交给OS --> 硬盘。
读数据:read <-- JVM当中的缓冲区 <-- 空了自动找OS要 <-- 硬盘。
FileOutputStream里面没有缓冲区,所以flush方法一点作用都没有。
FileInputStream/FileReader/FileWriter里面都有byte[8192]缓冲数组。
后三者当中:
读数据:一次性读取最多8192字节,每次read方法只是取出一些使用,用完了,就再读取最多8192字节。
写数据:每次write都将数据暂存到缓冲区当中,8192字节满了,自动清空刷新,交给操作系统。
使用FileWriter写数据实现换行和追加写
Windows的换行:\r\n(这是两个字符)
Linux/macOS的换行:\n
使用 FileWriter(String fileName,boolean append)构造方法追加写
使用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();