这里写目录标题
概念
缓存是IO的一种性能优化,缓存流为IO流增加了内存缓存区。有了缓存区,便可以减少系统直接与硬盘交互传输的次数,增加每次传送的数据量,借以提高传输效率,保护硬件。没有缓存功能的流当去输出时直接存入硬盘或目的地,如果有缓冲功能,则会将输出的内容先放置到缓存区中,等到有一定的数据量的时候,或者是调用close()方法关闭流、或调用flush()方法刷新流,才会将相应的内容保存到硬盘或者其它目的地。
注意:
- 在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,所以在建立缓冲区对象时,要先有流对象存在。缓冲区的出现提高了对流的操作效率。
字符缓冲输入流
Reader类有一个子类BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
案例: 使用缓冲流读取文本内容。
public class BufferedReaderTest1 {
public static void main(String[] args) {
String path = "D:\\woniu\\oop.txt";
File file = new File(path);
try(BufferedReader bufferedReader = new BufferedReader(new FileReader(file))){
while(true) {
//readLine()读一行
String readLine = bufferedReader.readLine();
if(readLine != null) {
System.out.println(readLine);
}else {
//当读到文件的末尾,结束循环的执行
break;
}
}
}catch (Exception e) {
// TODO: handle exception
}
}
}
字符缓冲输出流
Writer类有一个子类BufferedWriter :将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
public class BufferedWriterTest2 {
public static void main(String[] args) {
//1定位
File file = new File("D:\\woniu\\hello.txt");
//2建立管道
try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file,true))){
//3写
bufferedWriter.write("hello");
//4换行
bufferedWriter.newLine();
}catch (Exception e) {
// TODO: handle exception
}
}
}
CSV文件的读写
CSV文件类似于Excel表格
读
/**
* csv文件的读
* 在csv文件中单元格与单元格之间使用逗号间隔
*/
public class CSVReaderTest1 {
public static void main(String[] args) {
//1.定位
File file = new File("D:\\woniu\\demo.csv");
try(BufferedReader bufferedReader = new BufferedReader(new FileReader(file))){
while(true) {
//readLine()读一行
String readLine = bufferedReader.readLine();
if(readLine != null) {
System.out.println(readLine);
}else {
//当读到文件的末尾,结束循环的执行
break;
}
}
}catch (Exception e) {
// TODO: handle exception
}
}
}
写
/**
* csv文件的写
* @author Administrator
*
*/
public class CSVWriterTest2 {
public static void main(String[] args) {
//1.定位
File file = new File("D:\\woniu\\demo.csv");
try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file,true))){
bufferedWriter.write("chenyun,31");
bufferedWriter.newLine();
}catch (Exception e) {
e.printStackTrace();
}
}
}
Properties文件读写
简介
Properties指的是文件的内容格式,跟文件的后缀没有关系。如果一个文件中以键值对的形式存储数据,那这个文件就是一个Properties文件。该类主要用于读取java的配置文件。
Properties文件中键不能重复,值可以重复。为了提高可读性,文件的后缀通常使用properties表示。
写
package com.woniuxy.io3;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/**
* properties格式数据的读写
* properties格式:键值对的存储格式
*
* 写
* 为了提高程序的可读性,我们通常把文件的后缀改为properties
*/
public class Test1 {
public static void main(String[] args) {
//1.创建Properties对象
Properties properties = new Properties();
properties.put("username", "admin");
properties.put("password", "123456");
//2.调用properties对象的store方法,把数据使用字节输出流写入文件
try {
properties.store(new FileOutputStream(new File("D:\\woniu\\a.properties")), null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
读
package com.woniuxy.io3;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* 读
*/
public class Test2 {
public static void main(String[] args) {
// 1.创建Properties对象
Properties properties = new Properties();
//2.调用properties对象的load方法,把文件中的数据读取到properties对象中
try {
properties.load(new FileInputStream(new File("D:\\woniu\\a.properties")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//3.打印properties对象
System.out.println(properties);
//4.通过键取值
String uname = (String) properties.get("username");
System.out.println(uname);
}
}
对象流(了解)
当创建一个对象,程序运行时它就会存在,但是程序停止时,对象也就消失了.但是如果希望对象在程序不运行的情况下仍能存在并保存其信息,将会非常有用,对象将被重建并且拥有与程序上次运行时拥有的信息相同。可以使用对象的序列化。
-
对象的序列化: 将内存中的对象直接写入到文件设备中 ObjectOutput writeObject(Object obj)
//将对象写入底层存储或流。 -
对象的反序列化: 将文件设备中持久化的数据转换为内存对象 ObjectInput readObject(); //读取并返回对象。
序列化ObjectOutputStream
如果要将对象中的数据保存到文件中,需要使用对象流的序列化功能。
案例: 使用序列化将对象保存到文件中
注意: 在使用对象流操作对象时会报错:java.io.NotSerializableException,因为对象进行序列化和反序列化时实体类需要实现Serializable接口。
反序列化 ObjectInputStream
反序列化就是将序列化到文件中的内容读取出来。
案例: 使用反序列化读取文本内容。
注意:使用序例 化输出到文件的内容只能使用反序列化获得。
总结
- 对象的序列化:把java对象保存到文件中。
- 对象的反序列化:把文件中保存的数据转换为java对象。
- 在对象序列化时,被序列化的对象相关的类必须实现序列化接口。