- 固定套路:1. 创建IO流对象 2. 读写文件 3. 关闭流
- 固定的API方法:
java
//读:read():
/*读一个字节/字符*/
int read()
/*读一个字节/字符数组*/
int read(byte[] buf)
int read(char[] cbuf)
//写:write():
/*写一个字节/字符*/
write(int data)
/*写一个字节/字符数组*/
write(byte[] buf , int index , int len)
write(char[] buf , int index , int len)
write(String s) // 写字符串(针对字符流)
close() //关闭流
flush() //针对字符流、缓冲流
- 基础流:
java
/*字节流 : 读写任意类型的文件*/
FileInputStream fis = new FileInputStream(关联文件对象)
FileOutputStream fos = new FileOutputStream("关联文件")
FileOutputStream fos = new FileOutputStream("关联文件", true)//追加写入
/*字符流 : 针对纯文本文件进行读写*/
FileReader fr = new FileReader("关联文件")
FileWriter fw = new FileWriter("关联文件")
FileWriter fw = new FileWriter("关联文件",true) //追加写入
- 缓冲流(高效流):自身不具备读写能力,要依赖基础流(特点:提高读写效率)
java
/*字节缓冲流*/
BufferedInputStream bis = new BufferedInputStream( FileInputStream对象(转换流也行) )
BufferedOutputStream bos = new BufferedOutputStream( FileOutputStream对象 (转换流也行))
/*字符缓冲流*/
BufferedReader br = new BufferedReader( FileReader对象 )
BufferedWriter bw = new BufferedWriter( FileWriter对象 )
/*读一行(特有)*/
String s1 = br.readLine()
/*写一空行(特有)*/
bw.newLine()
- 转换流:自身不具备读写能力,要依赖基础流(特点:针对特有编码表的文件进行读写)
java
InputStreamReader isr = new InputStreamReader(基础字节流对象,"编码格式");//输入
OutputStreamWriter osw = new OutputStreamWriter(基础字节流对象,"编码格式");//输出
对象操作输入流(反序列化流): 从文件中读取存储的对象:
java
ObjectInputStream ois = new ObjectInputStream(FileInputStream对象(转换流也行));
类 对象 = ois.readObject();
List<类名> 对象List = (List<类名>) ois.readObject(); //使用反序列化流读取文件中的多个对象
对象操作输出流(序列化流): 把内存中创建的对象,写入到文件中:
java
/*创建序列化流对象*/
ObjectOutputStream oos = new ObjectOutputStream(FileOutputStream对象 (转换流也行));
oos.writeObject(序列化对象);//把对象写入到文件中
/*写入多个对象*/
List<类名> 对象List = new ArrayList<>();
Collections.addAll(对象List, 对象1,对象2);
序列化对象 :
java
public class 类名 implements Serializable {
private static final long serialVersionUID = 1L; //手动添加serialVersionUID的值,避免动态修改该类导致读取serialVersionUID的值不一致报错。
private transient 类型 名称;//该成员变量不参与序列化操作,关键字:transient
}
打印流:
java
PrintStream ps = new PrintStream("写入文件的路径/文件名.txt");
ps.print(数据);//不换行,写入
ps.println(数据);//换行,写入
/*日志使用:*/
System.setOut(ps);
System.out.println(数据);