Summarize:
Properties:是map的子类,存储String类型键值对的双列集合,它的后缀格式为 .properties 文件 只允许有键值对和注释(不能写中文),一行 是 一个键值对, 不能有任何符号
序列化流(ObjectOutputStream)和反序列化流(ObjectIutputStream):对文件的 写和读
打印流:分字符和字节打印流 最明显的特点 写什么就打印什么,原样输出,还有自动刷新和换行功能
Properties类:
特点:
①:Hashtable的子类,map集合中的方法都可用
②:该集合没有泛型,键值必须是字符串String类型
③:可以持久化的属性集,键值可存储在集合中,也可存储在持久化的设备上,键值的来源也可以是持久化的设备。
方法:
load(InputStream) 把指定流所对应的文件中的数据,读取出来,保存到Properties集合中
store(OutputStream,comments)把集合中的数据,保存到指定的流所对应的文件中,后面的参数代表对描述信息--一个注释,可以是空字符串
创建后缀名为.properties的文件
#this is a person #Tue Jun 18 11:25:42 CST 2019 age=123 name=zhangsan #this is a person #Tue Jun 18 11:28:09 CST 2019 name2=zhangsan age2=123 #this is a person #Tue Jun 18 16:29:00 CST 2019 name2=zhangsan age2=123
Properties存值取值
package com.oracle.demo01;
//Properties存值取值
import java.util.Properties;
public class Demo01 {
public static void main(String[] args) {
// 空参构造 搭配的文件是.properties文件(只能存键值对),#是注释 不能写中文,=左右不能有空格,不能换行,不能写任何符号
Properties pro=new Properties();
// 往集合中存储键值对
pro.setProperty("a", "1");
pro.setProperty("b", "2");
pro.setProperty("c", "3");
// 从集合中取值
System.out.println(pro.getProperty("a"));
System.out.println(pro.getProperty("b"));
System.out.println(pro.getProperty("c"));
}
}
读取properties到集合
package com.oracle.demo01;
//读取properties到集合
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
public class Demo02 {
public static void main(String[] args) throws IOException {
// 1.明确数据源
FileInputStream fis=new FileInputStream("src/com/oracle/demo01/pro.properties");// ""相对路径,用/
// 2.创建properties集合 读
Properties pro=new Properties();
// 3.将properties文件中的键值对存到properties集合中
pro.load(fis);
System.out.println(pro);//map的子类,无序
}
}
写入数据properties到集合
package com.oracle.demo01;
//写入数据properties到集合
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class Demo03 {
public static void main(String[] args) throws IOException {
// 明确目的地
FileOutputStream fos=new FileOutputStream("src/com/oracle/demo01/pro.properties",true);
// 创建properties集合
Properties pro=new Properties();
pro.setProperty("name2","zhangsan");
pro.setProperty("age2", "123");
// 将集合的键值对存到properties文件中 键不能重复
pro.store(fos, "this is a person");
}
}
pm
序列化流与反序列化流
序列化流 ObjectOutputStream 序列化的目的就是把文件存到本地让你看不懂的
反序列化流:ObjectInputStream 从文件中读取
readObject()从ObjectInputStream读取对象(需向下转型)
序列化接口Serializable无功能
序列化和反序列化 问题
ClassNotFoundException 找不到这个文件
序列化冲突问题:文件在解析时会生成一个序列号,当被序列化流时从流中获得的序列化号时,就会跟文件的序列号对比,只要两个号不一样,会产生序列化异常
解决方法:在类中定死序列化号
瞬态关键字transient :static类似,可以使属性不被序列化,被写时,输出初始化值
静态不能序列化流,
package com.oracle.demo02;
import java.io.FileInputStream;
//写一个序列化流和反序列化
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Demo01 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
read();
// write();
}
// 序列化 写 将对象存到文件中,目的是将对象存到本地 -静态后的不能序列化
public static void write() throws IOException{
// 序列化前提:要序列化的类必须实现 Serializable接口
// 明确目的地
FileOutputStream fos=new FileOutputStream("f:\\java\\person.txt");
// 创建对象
Person p =new Person("zhangsan",18);
// 创建序列化流
ObjectOutputStream oos=new ObjectOutputStream(fos);
// 将person对象写入文件中
oos.writeObject(p);
// 释放资源
oos.close();
}
// 反序列化 读 从文件中读取
public static void read() throws IOException, ClassNotFoundException{
// 明确数据源
FileInputStream fis=new FileInputStream("f:\\java\\person.txt");
// 创建反序列化流
ObjectInputStream ois=new ObjectInputStream(fis);
// 将文件中的对象读到person对象中
Person p=(Person)ois.readObject();//强转
System.out.println(p);
// 释放资源
ois.close();
}
}
打印流
是输出流的一种,只有输出目的,没有数据源,完成数据 自动刷新PrintWriter(OutStream/Writer,true)
①:字节打印流:PrintStream
②:字符打印流:PrintWriter
package com.oracle.demo02;
//打印流
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
public class Demo02 {
public static void main(String[] args) throws FileNotFoundException {
// 明确目的地
FileOutputStream fos=new FileOutputStream("f:\\java\\a.txt",true);//true 开始自动续写功能
// PrintWriter pw=new PrintWriter("f:\\java\\a.txt");
PrintWriter pw=new PrintWriter(fos,true);//true开启自动刷新功能
// 向文件中写入字符串
pw.println(100);
// pw.flush();//刷新
pw.print("bbbb");
// pw.flush();
pw.println("ccc cc");
// 释放资源
pw.close();
}
}
复制
package com.oracle.demo02;
//缓冲数据源 打印流目的地
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class CopyBufferedPrint {
public static void main(String[] args) throws IOException {
// 明确数据源
FileReader fr=new FileReader("f:\\java\\a.txt");
// 创建缓冲输入字符流 只有Buffered才有读一行的功能
BufferedReader br=new BufferedReader(fr);
// 明确目的地
FileWriter fw=new FileWriter("f:\\java\\a1.txt");
// 创建打印流
PrintWriter pw=new PrintWriter(fw,true);//true 开启刷新
// 开始复制
String line=null;
while((line=br.readLine())!=null){
pw.println(line);
}
// 释放资源
br.close();
pw.close();
}
}
来源:https://www.cnblogs.com/zs0322/p/11044500.html