Je lis un fichier dans JAVA et selon les spécifications des utilisateurs, je convertis les données dans une liste liée ou un arbre, mais comment puis-je enregistrer les données dans le fichier (comme une structure de données) , de sorte que la prochaine fois que je lis les données, je n'ai pas besoin de faire un effort supplémentaire pour analyser le fichier.Rendre la structure de données persistante
Répondre
Vous pouvez enregistrer les données comme celui-ci dans le fichier, il n'est pas une liste chaînée mais il vous aidera à comprendre
//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);
}
et vous pouvez récupérer les données comme celui-ci et vous ne avez pas besoin l'analyse du fichier à chaque fois que
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);
}
}
Cela dépend de la façon dont vous voulez stocker les données:
- Si vous ne voulez pas de stocker des données sous forme lisible par l'homme, alors vous pouvez aller de l'avant avec
Serialization
(exemple here). Java prendra soin de stocker/construire les objets/structures pendant les opérations d'écriture/lecture respectivement. Si vous souhaitez stocker les données sous une forme lisible par l'homme, vous pouvez convertir les données en
json
et les stocker au format String. Vous pouvez utiliser la classe de JacksonObjectMapper
, .: par exempleObjectMapper 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);
Vous pouvez utiliser serialization
qui est une fonctionnalité Java donc très facile à utiliser:
Economie:
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) ...{
}
Bien sûr, si ce n'est pas vous changer LinkedList
à ce que vous veulent
Charge:
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) ...{
}
à l'écriture que vous utilisez writeObject
et à vous lire utilisez readObject
+ casting
au bien de type (si l'ordre est important, si vous écrivez une liste puis chaîne, puis d'autres, vous pouvez lire la liste puis cordes puis Autre)
vous pouvez utiliser sérialisation pour écrire l'arbre dans un fichier, puis désérialiser quand vous voulez lire. – Slimu