Sauvegarder une liste en java

Résolu/Fermé
AigretteSidarta - 27 nov. 2011 à 18:19
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 30 nov. 2011 à 20:25
Bonjour,

Je crée une application en java mais je suis débutant, et je n'arrive pas à sauver mes listes.
En fait, j'ai créé 4 ArrayList et je voudrais les sauvegarder quand le programme se ferme, et les réutiliser quand le programme s'ouvre. J'ai déjà essayé plusieurs codes, mais j'ai toujours des erreurs. Que dois-je faire ?

Merci de m'aider !

A voir également:

2 réponses

AigretteSidarta
30 nov. 2011 à 19:45
Merci beaucoup pour le code, mais quand je lance le programme 2, je voudrais recréer mes 4 listes pour qu'elles soient telles que celles que j'ai enregistrées.
Que dois-je ajouter ?
1
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 nov. 2011 à 20:25
Pour reprendre mon exemple, il faudrait que la classe charger soit un peu plus précise parce que moi je récupère des Collection et qu'on ne peut pas les caster en ArrayList, LinkedList, HashSet, ou autres. Donc si tu veux récupérer exactement le même type que celui que tu as enregistré, tu dois le caster correctement au moment du ois.readObject.

Remarque : les listes ne seront pas exactement pareil, les contenus seront égaux mais les références des listes et des contenus seront différentes entre le premier et le deuxième programme.

public static void enregistrer(String fileName,ArrayList<Integer> toSave) throws Exception
{
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(fileName)));
	oos.writeObject(toSave);
	oos.close();
}

@SuppressWarnings("unchecked")
public static ArrayList<Integer> charger(String fileName) throws Exception
{
	ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(fileName)));

	ArrayList<Integer> liste = (ArrayList<Integer>) ois.readObject();
	ois.close();
	return liste;
}

public static void main(String...args) throws Exception
{		
	Integer n = new Integer(42);
	
	ArrayList<Integer> liste1 = new ArrayList<Integer>();
		liste1.add(n);
		liste1.add(n);
	
	enregistrer("D:\\test.txt",liste1);
	ArrayList<Integer> liste2 = charger("D:\\test.txt");

	System.out.println(liste1.get(0).equals(liste1.get(1)));
	System.out.println(liste1.get(0)==liste1.get(1));
	System.out.println();
	System.out.println(liste2.get(0).equals(liste2.get(1)));
	System.out.println(liste2.get(0)==liste2.get(1));
	System.out.println();
	System.out.println(liste1.equals(liste2));
	System.out.println(liste1==liste2);
	System.out.println();		
	System.out.println(liste1.get(0).equals(liste2.get(0)));
	System.out.println(liste1.get(0)==liste2.get(0));
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
27 nov. 2011 à 18:53
Tu peux t'orienter vers la sérialisation, mais uniquement si les éléments contenus dans la liste sont serializable. Sinon il faut que tu trouves un moyen de représenter tes éléments dans un format texte et être capable de les reconstruire à partir de ce texte
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
27 nov. 2011 à 19:55
Voici un exemple assez simple de sérialisation et désérialisation.
Ici je prends une ArrayList<Integer>, une LinkedList<Double> et un HashSet<String> que j'enregistre tous les trois dans le même fichier, puis je les relis à partir du fichier pour les afficher :

public static <E extends Collection<? extends Serializable>> void enregistrer(String fileName, E...toSave) throws IOException
{
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(fileName)));
	oos.writeInt(toSave.length); // on indique le nombre d'objets
	for (E e : toSave)
		oos.writeObject(e); // on écrit l'objet
	oos.close();
}

@SuppressWarnings("unchecked")
public static <E extends Collection<? extends Serializable>> List<E> charger(String fileName) throws IOException, ClassNotFoundException
{
	LinkedList<E> list = new LinkedList<E>();
	ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(fileName)));
	int n=ois.readInt(); // on lit le nombre d'objets
	for (int i=0; i<n; i++)
		list.add((E) ois.readObject()); // on lit l'objet
	ois.close();
	return list;
}

private static <E> void afficher(Collection<? extends Collection<E>> coll)
{
	for (Collection<E> c : coll)
	{
		System.out.print(c.getClass().getSimpleName()+" \t-->\t");
		for (E e : c)
			System.out.print(e.getClass().getSimpleName()+"\t"+e+"\t");
		System.out.println();
	}
}

@SuppressWarnings("unchecked")
public static void main(String...args) throws IOException, ClassNotFoundException
{	
	// Programme 1
	
	ArrayList<Integer> liste1 = new ArrayList<Integer>();
		liste1.add(1);
		liste1.add(2);
		liste1.add(3);
		
	LinkedList<Double> liste2 = new LinkedList<Double>();
		liste2.add(4.0);
		liste2.add(5.0);
		liste2.add(6.0);
	
	HashSet<String> liste3 = new HashSet<String>();
		liste3.add("7");
		liste3.add("8");
		liste3.add("9");
	
	// Fin du programme 1
	
	enregistrer("D:\\test.txt",liste1,liste2,liste3);

	// Début du programme 2
	
	List<Collection<Serializable>> liste = charger("D:\\test.txt");
	
	// Programme 2
	
	System.out.println("Données chargées : ");
	afficher(liste);
}
0