Classe abstraite, lister objets
Fermé
Chrome01
Messages postés
4
Date d'inscription
dimanche 21 février 2016
Statut
Membre
Dernière intervention
23 février 2016
-
21 févr. 2016 à 16:14
Chrome01 Messages postés 4 Date d'inscription dimanche 21 février 2016 Statut Membre Dernière intervention 23 février 2016 - 23 févr. 2016 à 22:28
Chrome01 Messages postés 4 Date d'inscription dimanche 21 février 2016 Statut Membre Dernière intervention 23 février 2016 - 23 févr. 2016 à 22:28
A voir également:
- Classe abstraite, lister objets
- Site pour vendre des objets d'occasion - Guide
- Retrouver photo de classe gratuitement ✓ - Forum Loisirs / Divertissements
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Programmation
- Copain d'avant photo de classe - Forum Réseaux sociaux
- Les objets du net - Forum Consommation & Internet
3 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
21 févr. 2016 à 16:19
21 févr. 2016 à 16:19
Bonjour,
Ton tableau est static, tu devrais donc utiliser une méthode static pour y accéder. Par exemple :
Ton tableau est static, tu devrais donc utiliser une méthode static pour y accéder. Par exemple :
public static List<Personne> getTableau() { return tableau; }
System.out.println(Personne.getTableau());
Chrome01
Messages postés
4
Date d'inscription
dimanche 21 février 2016
Statut
Membre
Dernière intervention
23 février 2016
21 févr. 2016 à 21:24
21 févr. 2016 à 21:24
Bonsoir,
Merci de ta réponse en effet cela a marché comme je le voulais.
Néanmoins maintenant j'ai voulu stocker tous mes objets dans un fichier csv sur lequel je pourrai écrire mes objets mais aussi les lire.
J'arrive bien à écrire et lire mais le problème est qu'à chaque écriture, le fichier est écrasé et je ne parviens pas à ajouter à la suite de mon fichier ...
Je créé un ObjectOutputFile qui me permet d'écrire mes objets sur le fichier et je passe en paramètre du new FileOutputStream un : ",1" qui aurait dû me permettre d'écrire à la suite.
J'ai lu que ce serait un problème de header mais je ne parviens pas à voir ce que je dois changer.
J'ai même eu une exception : java.io.StreamCorruptedException: invalid stream header
Est-ce tu aurais une idée de comment résoudre ce problème ?
Merci d'avance !
Merci de ta réponse en effet cela a marché comme je le voulais.
Néanmoins maintenant j'ai voulu stocker tous mes objets dans un fichier csv sur lequel je pourrai écrire mes objets mais aussi les lire.
J'arrive bien à écrire et lire mais le problème est qu'à chaque écriture, le fichier est écrasé et je ne parviens pas à ajouter à la suite de mon fichier ...
public class Vehicule_Liste { public static void main(String[] args) { ObjectInputStream ois; ObjectOutput oos; List<Vehicule> tab = new ArrayList<Vehicule>(); try { oos = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream( new File("vehicule.csv")),1)); oos.writeObject(new Auto("Audi", "A1")); oos.writeObject(new Auto("Audi", "A2")); /*tab.add(new Auto("Audi", "A1")); tab.add(new Auto("Audi", "A2")); tab.add(new Moto("Honda", 1000));*/ /** Pour tester si les autres objets restent dans le fichier .csv */ //tab.add(new Moto("THE TEST", 10000)); /*for(Vehicule v : tab) { oos.writeObject(v); }*/ /*System.out.println("Le tableau 1 est :"); System.out.println(tab);*/ oos.close(); List<Vehicule> tab2 = new ArrayList<Vehicule>(); ois = new ObjectInputStream( new BufferedInputStream( new FileInputStream( new File("vehicule.csv")))); try { System.out.println("Affichage Vehicule :"); while(true) { tab2.add(((Vehicule)ois.readObject())); } } catch(ClassNotFoundException e) { e.printStackTrace(); } catch(EOFException e) { ois.close(); } System.out.println("\nLe tableau 2 est : "); System.out.println(tab2); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
Je créé un ObjectOutputFile qui me permet d'écrire mes objets sur le fichier et je passe en paramètre du new FileOutputStream un : ",1" qui aurait dû me permettre d'écrire à la suite.
J'ai lu que ce serait un problème de header mais je ne parviens pas à voir ce que je dois changer.
J'ai même eu une exception : java.io.StreamCorruptedException: invalid stream header
Est-ce tu aurais une idée de comment résoudre ce problème ?
Merci d'avance !
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
21 févr. 2016 à 21:39
21 févr. 2016 à 21:39
Si tu travailles sur un fichier CSV (format texte) ce n'est pas des ObjectStream (format binaire) que tu devrais utiliser mais plutôt FileWriter/Scanner.
String fileName = "C:/test.csv"; boolean append = true; try (Writer writer = new FileWriter(fileName, append)) { writer.append("text;text\n"); }
Chrome01
Messages postés
4
Date d'inscription
dimanche 21 février 2016
Statut
Membre
Dernière intervention
23 février 2016
21 févr. 2016 à 22:00
21 févr. 2016 à 22:00
Donc si je veux utiliser cette les ObjectStream, je dois rester sur un fichier .txt ? Est-ce que tu aurais la solution pour régler le problème en admettant que j'utilise un fichier txt ?
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
21 févr. 2016 à 22:29
21 févr. 2016 à 22:29
Avec un ObjectStream (format binaire) ton fichier sera illisible avec un éditeur de texte, donc l'extension .txt n'est pas adapté. En Java on utiliserait plutôt l'extension .ser car ce que tu manipules ce sont des objets sérialisés...
Mais avec des fichiers textes tu peux utiliser la combinaison FileWriter/Scanner comme je te l'ai proposé plus haut. Exemple :
Remarque : je ne sais pas comment sont fait tes objets, j'ai mis text1 et text2 pour les valeurs "Audi" et "A1" que tu as mis dans ton code...
Mais avec des fichiers textes tu peux utiliser la combinaison FileWriter/Scanner comme je te l'ai proposé plus haut. Exemple :
String fileName = "C:/vehicule.csv"; System.out.println(fileName); List<Vehicule> list = Arrays.asList(new Auto("Audi", "A8"), new Auto("Audi", "A7")); try (Writer writer = new FileWriter(fileName, true)) { for (Vehicule v : list) writer.append(v.getText1()).append(";").append(v.getText2()).append("\n"); } System.out.println(list); List<Vehicule> list2 = new ArrayList<Vehicule>(); try (Scanner reader = new Scanner(new File(fileName))) { while (reader.hasNextLine()) { String line = reader.nextLine(); String[] text = line.split(";"); String text1 = text[0]; // text.length > 0 ? text[0] : ""; String text2 = text.length > 1 ? text[1] : ""; list2.add(new Vehicule(text1, text2)); } } System.out.println(list2);
Remarque : je ne sais pas comment sont fait tes objets, j'ai mis text1 et text2 pour les valeurs "Audi" et "A1" que tu as mis dans ton code...
Chrome01
Messages postés
4
Date d'inscription
dimanche 21 février 2016
Statut
Membre
Dernière intervention
23 février 2016
23 févr. 2016 à 22:28
23 févr. 2016 à 22:28
Bonsoir KX,
Je comprends le code que tu m'as proposé avec la solution FileWrite et Scanner je vais donc la mettre en place. J'avais lu plein de choses sur internet et je trouvais compliqué de mettre les ";" et gérer tout ça ... C'est pourquoi je mettais rabattu sur du ObjectStream mais avec ton code y a aucun soucis c'est super clair !
J'essaye ça et je te fais un retour
Merci !
Je comprends le code que tu m'as proposé avec la solution FileWrite et Scanner je vais donc la mettre en place. J'avais lu plein de choses sur internet et je trouvais compliqué de mettre les ";" et gérer tout ça ... C'est pourquoi je mettais rabattu sur du ObjectStream mais avec ton code y a aucun soucis c'est super clair !
J'essaye ça et je te fais un retour
Merci !