字符缓冲流
前缀表示功能
后缀表示具体是什么流
BufferedWriter(Writer w)
特有方法:newLine() 换行符
该方法具有平台(操作系统)无关性
mac \n
windows \r\n
BufferedReader(Reader r)
写(BufferedWriter)
private static void fun1() throws IOException {
FileWriter fw=new FileWriter("/Users/lanou/Desktop/Test/weixing.txt");
//创建缓冲字符流
BufferedWriter bw=new BufferedWriter(fw);
//写
bw.write("算了吧");
//添加换行
bw.newLine();
bw.write("地方的地方");
//刷新(字符流都需要刷新)
bw.flush();
//关闭资源
bw.close();
}
读(BufferedReader)
private static void fun2() throws FileNotFoundException, IOException {
//BufferedReader 特有读取方法
//readerLine() 一行一行读
//返回来的字符串不包含换行符
//读完返回null
FileReader fr=new FileReader("/Users/lanou/Desktop/Test/weixing.txt");
BufferedReader br=new BufferedReader(fr);
//读
String string="";
while ((string=br.readLine())!=null) {
System.out.println(string);
}
}
复制文件
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("/Users/lanou/Desktop/Test/weixing.txt");
BufferedReader br=new BufferedReader(fr);
FileWriter fw=new FileWriter("/Users/lanou/Desktop/Test/dahai.txt");
BufferedWriter bw=new BufferedWriter(fw);
String string="";
while ((string=br.readLine())!=null) {
//写
bw.write(string);
//换行(读出来字符串不带换行的)
//复制文本会多一个换行 不影响你使用
bw.newLine();
//刷新
bw.flush();
}
br.close();
bw.close();
}
Properties(双列集合) 继承自Hashtable
该集合是唯一能和IO流产生关系的集合
private static void fun1() {
Properties properties=new Properties();
//添加数据(特有方法 只能添加字符串)
properties.setProperty("name", "张三");
properties.setProperty("age", "18");
Set<Object> keySet = properties.keySet();
}
}
读取方法(load()加载)
private static void fun2() throws FileNotFoundException, IOException {
//读取文件 最终会把数据加载集合中
Properties properties=new Properties();
FileInputStream fis=new FileInputStream("/Users/lanou/Desktop/Test/asds.properties");
//把数据加载到集合当中
properties.load(fis);
//关闭流资源
fis.close();
System.out.println(properties);
}
写入方法(store())
public static void main(String[] args) throws IOException {
Properties properties=new Properties();
//添加数据
properties.setProperty("username","zhangsan");
properties.setProperty("password","123456");
//将集合中的数据 写入到文件中
//参数2 添加注释(一般什么都不写)中文注释是乱码的
FileOutputStream fos=new FileOutputStream("/Users/lanou/Desktop/Test/asds.properties");
properties.store(fos, "haha");
//关闭资源
fos.close();
}
序列化和反序列化流
序列化(Serialization):
序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或保存在文件、数据库里,并在需要时把该流读取出来重新构造一个相同的对象。
序列化时,都会生成序列号是常量,这样就不会发生序列号不同异常
注意:大多数的系统类,都实现了序列化接口,你只需要把你自定义的类在序列化的时候实现接口就行了
//写对象方法
public static void writer() throws IOException {
FileOutputStream fos=new FileOutputStream("/Users/lanou/Desktop/Test/asds.txt");
//创建序列化流
ObjectOutputStream oos=new ObjectOutputStream(fos);
//序列化接口 Serializable 标识性接口
//如果你这个类想进行序列化的 必须要实现该接口
//Person 要实现该接口
oos.writeObject(new Person("zhangsan",18));
//关闭资源
oos.close();
}
//读取的方法
public static void read() throws IOException, ClassNotFoundException {
FileInputStream fis=new FileInputStream("/Users/lanou/Desktop/Test/asds.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
//读取对象时 需要按照你的class文件来读取
//删除class测试
Object object = ois.readObject();
System.out.println(object);
//关闭资源
ois.close();
}