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而言,这取决于您希望如何存储数据: 如果您不希望数据以人类可读的形式

我用JAVA读取一个文件,并根据用户规范将数据转换为链表或树,但如何将数据保存到文件中(作为数据结构),以便下次读取数据时不必额外解析文件

您可以像这样将数据保存到文件中。它不是链表,但有助于理解

//救人
公众人士(){
试一试{
个人信息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) ...{
}