我在JAVA中读取一个文件并根据用户规范将数据转换为链接列表或树,但是如何将数据保存到文件中(作为数据结构) ,所以下次我读取数据时,我不必花费额外的精力来解析文件。使数据结构持久
Q
使数据结构持久
-1
A
回答
0
你可以像这样的数据保存到文件,它不是一个链表,但它有助于理解
//save persons
public void savePersons(){
try{
PersonsInfo p;
String line;
FileWriter fw= new FileWriter("input.txt");
PrintWriter pw= new PrintWriter(fw);
for (int i=0 ; i<persons.size();i++){
p =(PersonsInfo)persons.get(i);
line = p.getName() +","+ p.getAddress() +","+ p.getPhoneNum();
pw.println(line);
}
pw.flush();
pw.close();
fw.close();
} catch (IOException ioEx){
System.out.println(ioEx);
}
,你可以检索这样的数据,你不需要在每一次
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);
}
}
0
这取决于你想如何存储数据解析文件:
- 如果您不想将数据存储在人类可读的形式,那么你可以用
Serialization
(例如here)继续。 Java将分别在写/读操作期间负责存储/构造对象/结构。 如果你想以人类可读的形式存储数据,那么你可以将数据转换成比如
json
并以String格式存储它。您可以使用杰克逊的ObjectMapper
类,例如:ObjectMapper mapper = new ObjectMapper(); YourClass object = new YourClass(); FileOutputStream outputStream = new FileOutputStream("path_to_file"); outputStream.write(mapper.writeValueAsBytes(object));
//Read YourClass persisted = mapper.readValue("path_to_file", YourClass.class);
0
您可以使用serialization
这是一个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) ...{
}
当然,如果这不是你改变LinkedList
,无论你想要
负载:
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) ...{
}
在编写您使用writeObject
,并在阅读您使用readObject
+ casting
向好的类型(这样的顺序是非常重要的,如果你写了一个名单,然后字符串,然后其他的,你可以阅读列表此后字符串,然后其他)
相关问题
- 1. Erlang持久数据结构
- 2. Scala中的持久数据结构
- 3. Java中的持久数据结构
- 4. 持久与不可变数据结构
- 5. iOS非持久性数据结构
- 6. Magento结帐数据持久
- 7. 如何使数据结构在C++中持久化?
- 8. 如何将持久数据结构“绑定”到Scala中的GUI?
- 9. Ruby中的树数据结构持久性
- 10. 序列化持久性/功能性数据结构
- 11. 持久数据结构的高效批量修改
- 12. 是否有双向multimap持久数据结构?
- 13. 实现功能/持久性字典数据结构
- 14. 数据持久性
- 15. 树结构和Java持久性2.0
- 16. FluentNHibernate和持久化的树结构
- 17. Java servlet和持久性结构
- 18. Java:大型持久散列结构?
- 19. 服务结构使用单个数据库持久服务的状态服务
- 20. Java Google App Engine:在将对象添加到另一个持久对象的持久数据结构之前,是否需要使对象持久化?
- 21. 使用Javascript的持久数据
- 22. 使用ngstorage作为持久数据
- 23. Camunda H2数据库持久
- 24. iPhone持久数据与NSUserDefaults
- 25. AIR 2 - 数据持久性?
- 26. Angular 2数据持久性
- 27. 持久的Firebase数据库
- 28. SWFAddress和数据持久性
- 29. Swift中的持久数据
- 30. 持久化数据在JSP
您可以使用序列化的文件中写入的树,然后反序列化它,当你想读它。 – Slimu