Bonjour
y'a t'il possibilité d'ajouter des objets dans un fichier déja existant sans pour autant écraser ce fichier
Merci d'avance
Sami Chine
Bonjour
y'a t'il possibilité d'ajouter des objets dans un fichier déja existant sans pour autant écraser ce fichier
Merci d'avance
Sami Chine
Bonjour,
s'il s'agit de sérialisation, binaire par exemple,
c'est possible, mais il faut dans ce cas créer une classe dérivée de ObjectOutputStream pour éviter qu'à chaque ajout d'un objet dans le flux, la partie header soit insérée.
Il ne faut en effet qu'un seul Header par fichier, faute de quoi on obtient une exception de type java.io.StreamCorruptedException.
Classe dérivée gérant l'ajout d'objets dans le flux :
Cette classe n'est utilisable que pour ajouter des objets dans un flux existant, il faut donc tester l'existance du fichier de sérialisation, s'en servir si il existe, et sinon utiliser ObjectOutputStream :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class AppendObjectOutputStream extends ObjectOutputStream { public AppendObjectOutputStream (OutputStream out) { super(out); } @Override protected void writeStreamHeader() throws IOException { //Pas de header et reset du Stream reset(); } }
Exemple de méthode pour sérialiser un objet obj dans un fichier de nom fileName
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public void write(Object obj, String fileName){ FileOutputStream fos=null; ObjectOutputStream oos=null; File f = new File(fileName); if(f.exists()){ //ouverture du FileOutputStream avec append à vrai pour écriture en fin de fichier FileOutputStream fos = new FileOutputStream(fileName,true); //On utilise AppendObjectOutputStream pour ne pas avoir le header ObjectOutputStream oos = new AppendObjectOutputStream(fos); } else{ FileOutputStream fos = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(fos); } try { oos.writeObject(obj); oos.flush(); } finally { oos.close(); fos.close(); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager