Java 使数据结构持久化
我用JAVA读取一个文件,并根据用户规范将数据转换为链表或树,但如何将数据保存到文件中(作为数据结构),以便下次读取数据时不必额外解析文件 您可以像这样将数据保存到文件中。它不是链表,但有助于理解Java 使数据结构持久化,java,data-structures,linked-list,tree,Java,Data Structures,Linked List,Tree,我用JAVA读取一个文件,并根据用户规范将数据转换为链表或树,但如何将数据保存到文件中(作为数据结构),以便下次读取数据时不必额外解析文件 您可以像这样将数据保存到文件中。它不是链表,但有助于理解 //救人 公众人士(){ 试一试{ 个人信息p; 弦线; FileWriter fw=新的FileWriter(“input.txt”); PrintWriter pw=新的PrintWriter(fw); 对于(int i=0;i而言,这取决于您希望如何存储数据: 如果您不希望数据以人类可读的形式
//救人
公众人士(){
试一试{
个人信息p;
弦线;
FileWriter fw=新的FileWriter(“input.txt”);
PrintWriter pw=新的PrintWriter(fw);
对于(int i=0;i而言,这取决于您希望如何存储数据:
- 如果您不希望数据以人类可读的形式存储,那么可以继续进行
序列化
(示例)。Java将在写/读操作期间分别负责存储/构造对象/结构
- 如果要以人类可读的形式存储数据,则可以将数据转换为字符串格式,例如
json
。您可以使用Jackson的ObjectMapper
类,例如:
ObjectMapper mapper=new ObjectMapper();
YourClass对象=新建YourClass();
FileOutputStream outputStream=新的FileOutputStream(“路径到文件”);
outputStream.write(mapper.writeValueAsBytes(对象));
//读取
YourClass persisted=mapper.readValue(“路径到文件”,YourClass.class);
下面是示例和文档
您可以使用序列化
,这是一种非常易于使用的Java功能:
保存:
ObjectOutputStream oos = null;
try {
LinkedList<String> list = new LinkedList<>();
list.add("toto"); list.add("tata");
oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\..\\Doc\\list.ser"));
oos.writeObject(list);
} catch ... {
}finally (oos.close) ...{
}
写入时使用writeObject
,读取时使用readObject
+casting
转换为正确的类型(因此顺序很重要,如果先写列表,然后写字符串,然后写其他,则可以先读列表,再读字符串,然后写其他)
您可以使用序列化在文件中写入树,然后在需要读取时对其进行反序列化。
public class AddressBook{
ArrayList<PersonsInfo> persons;
public AddressBook (){
persons = new ArrayList <PersonsInfo> ();
loadPersons();
}
//Load Person
public void loadPersons (){
String tokens[]=null;
String name,address,phoneNum;
try{
FileReader fr= new FileReader("input.txt");
BufferedReader br= new BufferedReader(fr);
String line=br.readLine();
while (line !=null)
{
tokens = line.split(",");
name=tokens[0];
address=tokens[1];
phoneNum=tokens[2];
PersonsInfo p = new PersonsInfo(name,address,phoneNum);
persons.add(p);
line = br.readLine();
}
br.close();
fr.close();
}catch (IOException ioEx) {
System.out.println(ioEx);
}
}
ObjectOutputStream oos = null;
try {
LinkedList<String> list = new LinkedList<>();
list.add("toto"); list.add("tata");
oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\..\\Doc\\list.ser"));
oos.writeObject(list);
} catch ... {
}finally (oos.close) ...{
}
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("C:\\Users\\..\\Doc\\list.ser"));
final LinkedList<String> list = (LinkedList<String>) ois.readObject();
System.out.println(list.toString()); //[toto,tata]
} catch ... {
}finally (ois.close) ...{
}