begin process at 2010 03 22 07:33:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > UNE CLASSE TOUTE BÊTE POUR SAUVEGARDER DES OBJETS

UNE CLASSE TOUTE BÊTE POUR SAUVEGARDER DES OBJETS


 Information sur la source

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :21/04/2004 Vu / téléchargé :4 877 / 236

Auteur : Asrull

Ecrire un message privé
Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

 Description

bon c'est peut être un peu bébête mais si ça peut servir à qqun ou si un expert peut me faire une critique constructive de mes bidouillages ça me fera plaisir.
Cette classe a une mission simple, on lui donne un chemin d'accès et un objet, il faut qu'elle me le sauvegarde. L'objet en question doit impérativement "implements Serializable" comme ils disent dans l'API, sinon ... ça marche pas

Source

  • import java.io.File;
  • import java.io.FileInputStream;
  • import java.io.FileOutputStream;
  • import java.io.ObjectInputStream;
  • import java.io.ObjectOutputStream;
  • public class FichierObjet
  • {
  • String nomFichier;
  • ObjectOutputStream fichierE;
  • ObjectInputStream fichierL;
  • boolean ohyeah;
  • public FichierObjet(String nomFichier)
  • {
  • this.nomFichier=nomFichier;
  • }
  • private boolean ouvrirFichierE()
  • {
  • ohyeah=true;
  • try{fichierE=new ObjectOutputStream(new FileOutputStream(nomFichier));}
  • catch(Exception e){ohyeah=false;}
  • return ohyeah;
  • }
  • private boolean fermerFichierE()
  • {
  • ohyeah=true;
  • try{fichierE.close();}
  • catch(Exception e){ohyeah=false;}
  • return ohyeah;
  • }
  • private boolean ouvrirFichierL()
  • {
  • ohyeah=true;
  • try{fichierL=new ObjectInputStream(new FileInputStream(nomFichier));}
  • catch(Exception e){ohyeah=false;}
  • return ohyeah;
  • }
  • private boolean fermerFichierL()
  • {
  • ohyeah=true;
  • try{fichierL.close();}
  • catch(Exception e){ohyeah=false;}
  • return ohyeah;
  • }
  • public boolean sauvegarder(Object objet)
  • {
  • ohyeah=ouvrirFichierE();
  • try{fichierE.writeObject(objet);}
  • catch(Exception e){ohyeah=false;}
  • fermerFichierE();
  • return ohyeah;
  • }
  • public Object charger()
  • {
  • ohyeah=ouvrirFichierL();
  • Object objet=null;
  • try{objet=fichierL.readObject();}
  • catch(Exception e){ohyeah=false;}
  • fermerFichierL();
  • return objet;
  • }
  • }
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class FichierObjet
{
	String nomFichier;
	ObjectOutputStream fichierE;
	ObjectInputStream fichierL;
	boolean ohyeah;
	public FichierObjet(String nomFichier)
	{
		this.nomFichier=nomFichier;
	}
	private boolean ouvrirFichierE()
	{
		ohyeah=true;
		try{fichierE=new ObjectOutputStream(new FileOutputStream(nomFichier));}
		catch(Exception e){ohyeah=false;}
		return ohyeah;
	}
	private boolean fermerFichierE()
	{
		ohyeah=true;
		try{fichierE.close();}
		catch(Exception e){ohyeah=false;}
		return ohyeah;
	}
	private boolean ouvrirFichierL()
	{
		ohyeah=true;
		try{fichierL=new ObjectInputStream(new FileInputStream(nomFichier));}
		catch(Exception e){ohyeah=false;}
		return ohyeah;
	}
	private boolean fermerFichierL()
	{
		ohyeah=true;
		try{fichierL.close();}
		catch(Exception e){ohyeah=false;}
		return ohyeah;
	}
	public boolean sauvegarder(Object objet)
	{
		ohyeah=ouvrirFichierE();
		try{fichierE.writeObject(objet);}
		catch(Exception e){ohyeah=false;}
		fermerFichierE();
		return ohyeah;
	}
	public Object charger()
	{
		ohyeah=ouvrirFichierL();
		Object objet=null;
		try{objet=fichierL.readObject();}
		catch(Exception e){ohyeah=false;}
		fermerFichierL();
		return objet;
	}
}

 Conclusion

bon, à vrai je l'ai juste essayée avec un petit String pour voir, je sais pas trop si ça peut supporter les gros objets (genre un airbus quoi).
Je vais peut être me pencher sur une version qui archive plusieurs objets en un seul fichier.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

JIMAGE, UN COMPOSANT FAÇON JPANEL QUI GÈRE UNE IMAGE ET UN M...

 Sources de la même categorie

LIRE LES FICHIERS .WAV par Julien39
Source avec Zip Source avec une capture TRADUCTEUR FRANÇAIS --> NERLANDAIS V3 par edouard333
Source avec Zip IA POUR DISCUTER par edouard333
Source avec Zip Source avec une capture JSUBTITLE1.0 par darrylsite
Source avec Zip COMPILATEUR PASCAL par youma85

Commentaires et avis

Commentaire de Asrull le 21/04/2004 16:42:34

Yopla, j'ai oublié de remercier tds pour la base du code, c'est maintenant chose faîte.

Commentaire de Asrull le 21/04/2004 16:42:39

Yopla, j'ai oublié de remercier tds pour la base du code, c'est maintenant chose faîte.

Commentaire de Asrull le 21/04/2004 16:43:08

Yopla, j'ai oublié de remercier tds pour la base du code, c'est maintenant chose faîte.

Commentaire de tds le 22/04/2004 07:27:23

3 merci, c'est trop :p
Il est toujours bon d'avoir plusieurs points de vue sur un même sujet!

T'inquiète, cela sauvegarde très bien les airbus également :p

Commentaire de tds le 22/04/2004 07:29:19

Ben, c'est con j'ai demandé une signature automatique sur mes messages et ca apparait pas :'(

Commentaire de Nightman150 le 27/04/2004 17:24:06

J'ai quelques remaques sur ton code :
  - Tu aurais du metter en private les champs :
                 String nomFichier;
                 ObjectOutputStream fichierE;
                 ObjectInputStream fichierL;
                 boolean ohyeah;
  - Tu aurait due spécifiser le nom exacte de l'exception
     FileNotFoundException , IOException

Sinon je ne vois pas trop l'interêt de créer une classe pour stocker seulement des string, ça aurait était mieux de la rendre generique
(Si tu vois ce que je veux dire)...

Commentaire de Asrull le 27/04/2004 18:24:16

hum, suis d'accord pour les améliorations (je l'ai ai déjà intégrées dans la seconde version de cette classe qui ne va pas tarder), mais je suis pas d'accord avec ton problème d'intérêt. Cette classe ne stocke pas que des String, mais tout objet qui implémente Serializable. Celà me permet de stocker une instance d'objet et de le réccupérer par la suite dans le même état que je l'ai laissé (ex applic : sauvegarde de jeux, bdd, stat, tout ce qui peut toucher à une gestion d'historique ... etc)

Commentaire de tds le 27/04/2004 18:41:03

Oui, n'oubliez pas les amis que charger un objet prend plus de TEMPS
Par contre, il demande moins de ''Merd..." et de lignes dans le pgm.

J'aime encore bien coder des trucs de oufs, je vais bientôt mettre un lecteur MP3 compatible tout OS :p

B@ron {EU.BELGIUM}

Commentaire de Nightman150 le 28/04/2004 10:12:26

Ok, ça pourrait être utile pour stocker des trucs comme tu dit,
mais il ne faut pas oublier que les fichiers c'est facile à supprimer,
Pour les sauvegarde de vous ça se passe dans la base de registre de Windows (plus compliqué à supprimer)
D'autre part les fichiers c'est dépassé maintenant on utilise plutôt les bases de données,
En plus tds les objets ça bouffe de la mémoire, faut pas en abuser

Commentaire de tds le 28/04/2004 10:23:09

CQFD, vaut mieux user des DB :p

B@ron {EU.BELGIUM}

Commentaire de Asrull le 28/04/2004 10:35:17

les fichiers ça peut être supprimé ? okay mais c'est pareil pour une bdd. si tous les truc que tu fais sont inutiles passk'ils peuvent être supprimés ben on risque de plus dévelloper grand chose, d'ailleurs vaudrait mieux arrêter l'informatique ... non sans blagues. Je suis d'accord qu'une bdd c'est mieux dans certains cas, mais tu vas pas me faire crois que tu vas te casser la tête à monter une bdd pour une pauvre sauvegarde de partie de monopoly. Le développement c'est aussi un compromis besoin/efficacité/temps. Et si un user s'amuse à supprimer des fichiers par çi par là, qu'il ne s'étonne pas que sa bécane plante .
Celà dit je suis peut être complètement dans le faux et peut être que cette classe est réellement complètement inutile.

Commentaire de Asrull le 28/04/2004 10:40:46

yo d'aillieurs j'en profite que l'on parle de bdd pour demander de l'aide. J'ai besoin de me connecter (pr un autre projet) à base access et je suis pas trop doié en sql. qqun aurait des supports ou des exemples pas compliqués ) m'indiquer ?

Commentaire de Egalon le 08/06/2004 14:13:22

Ben moi, pour répondre à nightman150, je trouve que sauvegarder des trucs dans un fichier ça peut etre utile. Par exemple, tu joues à un jeu Spuer trop balèze que tu rames tellement pour avanver. Ben ... quand y a une coupure de courant, t'es bien content de reprendre ou t'en étais.

Voila. C'est tout pour les critiques.
Donc je t'encourage vivement à continuer cette source et j'espère que tu arriveras à sauvegarder plusieurs objets dans un fichier.

Commentaire de Nightman150 le 08/06/2004 14:47:12

Pour te répondre Egalon, En général on n'utilise pas les fichiers pour sauvegarder des parties de jeux. On utilise la base de registre (si tu vois ce que c'est :)    )  
Il y a des fonctions prédéfinies qui permettent d'écrire dans la base de registre et c'est pas hypercompliqué.
Sinon on m'as mal compris au sujet des bases de données.
ce que je voulais dire c'est les fichiers sont sensés être utilisés pour stocker
des informations surtout dans le domaine des applications de gestion (fichiers de personnels, fournisseurs etc).
Et il y a longtemps qu'ils ont été remplacé par les bases de données
(plus rapide, fiable et sécurisé)
Maintenant dans les universités on n'enseigne même plus les structures de fichiers (séquentiel ,  indexé , accès aléatoire) ce n'est plus utilisé
Voila pourquoi je ne vois pas l'intêrét de ce programme.

Commentaire de Egalon le 08/06/2004 16:40:52

C'était un exemple très con, je l'admets.
Rassure-toi ce genre de programme est encore très utile dans le monde d'ou je viens: l'informatique industrielle. Apparement semblable à l'informatique, mais réellement différent. Dans ce monde tout n'est pas que Windows ou Linux, il y a des modules programmable en toute sorte de langage et par exemple je travaille sur une carte qui effectue des mesures de température et les revoit sur un pseudo-serveur qui lui fonctionne sous windows et donc qui remplit une DB.

Il y a bien un point sur lequel je suis d'accord avec toi, c'est la consommation de ressources par les objets créés. Et ceci est encore bien plus vrai en informatique industrielle ou les ressources ne sont jamais présente à foison.

Commentaire de Nightman150 le 09/06/2004 17:12:34

Je suis d'accord avec toi Egalon. ça pourrai être utile pour l'informatique industrielle. Ce n'est pas mon domaine de prédilection.
En effectuant des stages dans le cdre de mes études je me suis rendu compte que dans les boites informatiques ça se passe pas comme dans  on peut le croire dans les universités!

Je pourrai paraitre un peu chiant en insistant. Mais je persiste à dire
que les fichiers pour stocker des informations c'est plus d'actualités pour ce qui est de l'informatique du génie logicielle.

On travaille maintenant pour créer des bases de données à  qu'on pourra interroger en Langage naturelle, on va travaille plus sur de simples fichiers, faut pas déconner.

Commentaire de Asrull le 09/06/2004 17:28:56

Nightman150, c'est pas pour remettre une couche mais j'insiste. Je te met vraiment au défit de me monter une bdd ou travailler sur des bases de registres pour faire simple Monopoly même pas en réseaux.
Je te met au défi de faire tout ça en même temps que tu planches sur IA joueurs.

De mémoire je connais pas un mec sur terre qui met de l'uranium dans le réservoir de sa deux chevaux.

Commentaire de tds le 10/06/2004 07:33:44

Bon allez, je pense que l'on a compris...

Si je devais faire un monopoly, bien sur que j'utiliserais des fichiers car le nb d'informations ainsi que leur structure reste très simple...
Si les informations sont stockées et ne peuvent être utilisées que pour ce jeu-là alors je sauverais peut-être même les informations via des objets. (Si ce que je dois sauver peut être utilisé par d'autres pgm alors je sauverais que du texte, ce qui rend mes données indépendantes d'une classe...)

Cependant pour la plupart des applications de société, il est requis de passer par une base de données car elles gèrent mieux les données abondantes et les structures complexes... (NB: un DB oracle, sybase,... ne sont que des fichiers organisés...)

B@ron{EU.BELGIUM}

Commentaire de Asrull le 10/06/2004 09:30:08

Ouaf, grande sagesse de tds, ça soulage, Nightman150 ya rien contre toi et je suis d'accord pour dire que les bdd c'est carement mieux (gt moi même responsable bdd en marketing), et ma classe est simple, bateau sans aucune prétention. Mais en admettant qu'il soit envisageable de monter une bdd pour un monopoly, on apprend toujours un langage par un truc simple (je pense) et moi ça fait a peine deux mois que je me suis posé sur java, et je développe pour le fun (à peine 3h/semaine) ... ... ...

Commentaire de Nightman150 le 10/06/2004 13:46:26

Je n'arrive pas à te comprendre franchement Asrull.
Les fichiers c'est à utiliser stocker des informations qu'on veut traiter après
(mise à jour , ajout suppession bla bla bla)
Pour les applications comme les jeux ,
Ou même pour des jeux auusi compliqué comme les échecs on utilise la mémoire centrale de l'ordinateur (Mémoire vive) car l'accés est très rapide en comparaison avec la mémoire de masse.
Je n'ai jamais parlé d'utiliser une bd pour un jeux de monopoly alors arrête qel e répéter s'il te plait.

Pour ce qui est de sauvegarder des parties on utilise la base de registre pour stocker les paramétres du jeux (c'est tout).
D'autre part c'est pas compliqué d'utiliser une base de données voici ce qu'il faut faire, regarde cette page ;
http://java.sun.com/docs/books/tutorial/rmi/implementing.html


Commentaire de Asrull le 10/06/2004 14:22:54

là, j'abandonne.

Commentaire de Asrull le 10/06/2004 14:53:12

il s'agit pas d'un jeu compliqué, il s'agit d'un monopoly et c'est une application que je prépare pour me faire la main en java (dc niveau j'y connais pas grand chose).
L'objectif de cette classe et de stocker une classe "Jeu" qui ne contient que les posistions et noms des joueurs, la liste de leurs propriétés et la valeur de leurs portefeuilles. Sachant qu'il y au maximum 8 joueurs ça nous donnerais avec la trentaine de propriétés du jeu, en bdd relationnelle et en étant généreux, ça nous donnerais une bdd qui ne fera pas plus de 100 lignes (chez moi un bdd c'est au moins 700000 éléments, ça a du drôlement changer depuis si on en fait pour 100 éléments), et j'y connais pas grand chose en base de registres mais vu de mon écran ça a l'air sérieusement lourd.
Je te remercie pour l'info sur les bdd, puisque je vais plancher la dessus mais cette fois si pour mon boulot (interprétation auto sur suivi de chiffre d'affaire).
je suis complètement d'accord avec toi sur la question de  l'évolution des moyens de stockages fiables.
Mais pour grand max 20k de textes et de chiffres ... qui ne seront appelées que deux fois dans l'appli à savoir au début pour "charger" la dernière partie et à la fin pour la "sauvegarder" ..., pour une application qui prendra pas la moitié d'une disquette, désolé si ça te déçois mais j'utiliserais un fichier.
Et puis de mémoire le dernier jeu auquel j'ai joué c'était Neverwinter Nights, je pense pas que ce soit si vieux, et les sauvegardes (c'est un RPG, les sauvegardes sont beaucoup plus lourdes que pour un monopoly, tu en conviendras) fonctionnaient trés bien avec des fichiers.

Commentaire de tds le 10/06/2004 14:55:16

Vous etes marrant, ...
Allez tous en rang...

B@ron {EU.BELGIUM}

Commentaire de Nightman150 le 11/06/2004 12:49:16

Je suis d'accord avec toi. Si tu ne t'y connais pas  assez en Base de Registre, ça serait délicat de s'aventurer là de dans. ce qui pourrai endommager la base de registre de la machine indispensable pour  Windows.

Commentaire de MasterFangorn le 21/06/2004 20:35:52

>> Si tu ne t'y connais pas  assez en Base de Registre

L'interêt du langage et de la plateforme JAVA c'est justement d'être multiplateforme ; Linux, Windows, Solaris, PDA, Montre, Telephone portable ... Et je me trompe peut-être, mais je n'ai pas vu de BASE DE REGISTRE ailleurs que sous Windows.

La sérialisation d'un objet est une très bonne chose pour des objets de relative petite taille, genre le score d'un casse brique.

Asrull, bravo pour ta classe.

Commentaire de tds le 22/06/2004 08:23:08

C'est sur, cela me rend parfois triste aussi de voir comment on peut détruire ce que java nous propose de plus puissant :'(
(Evitons les .bat, registres, .sh,...)

Utilisons les technologies compatibles SVP...
B@ron {EU.BELGIUM}

Commentaire de Asrull le 22/06/2004 10:40:39

Tiens c'est vrai ça je n'y avait pas songé. Ce truc est bien plus portable qu'une base de registre. Mais en toute honnêteté MasterFangorn, j'ai plus songé à la simplicité d'utilisation qu'à la portabilité de la classe ... Celà dit ça me conforte quand même de savoir que l'idée n'est pas si stupide que ça.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales