2017-07-17 2 views
-1

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

+0

vous pouvez utiliser sérialisation pour écrire l'arbre dans un fichier, puis désérialiser quand vous voulez lire. – Slimu

Répondre

0

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); 
} 
} 
0

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 Jackson ObjectMapper, .: par exemple

    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);

    Here's l'exemple et la documentation est ici Jackson's.

0

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)

Serialization Details