cs_cila
Messages postés9Date d'inscriptionlundi 21 mai 2012StatutMembreDernière intervention16 septembre 2012
-
21 juin 2012 à 10:33
cs_cila
Messages postés9Date d'inscriptionlundi 21 mai 2012StatutMembreDernière intervention16 septembre 2012
-
8 juil. 2012 à 11:43
Bonjour, ma question est :
j'utilise le langage java, j'ai des tables HashMap à stocker dans des fichiers binaires et les recuperer plutard, j'ai essayer de le réaliser avec l'exemple suivant:
mon but et de stocker ces table et pouvoir acceder à leurs contenu à partir d'un autre programme,par exemple dans un programme je teste si un string (abc) se trouve dans cette table si oui retourner sa valeur.merci d'avance.je voudrais au moins des indices .
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 21 juin 2012 à 15:53
Salut,
Si ton autre application est également en java et qu'elle peut lire des fichiers sérialisés... pourquoi ne pas simplement utiliser la sérialisation et du coups tu auras moins de tracas...
-----
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
J'avoue que de cette façon c'est plus simple. Il va juste falloir bien lire ton fichier en lisant les objets sérializés dans le même ordre qu'ils ont été mis dans le fichier.
--
Pylouq (Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_cila
Messages postés9Date d'inscriptionlundi 21 mai 2012StatutMembreDernière intervention16 septembre 2012 28 juin 2012 à 09:22
salut, on a déja utilisé cette methode que vous venez de nous proposez (sérialisation) mais on s'est trompé au niveau de la lecture, maintenant on a crée deux classes et il n ya pas de problème (grâce à vous).on a deux autres quéstions:
1.quand on ouvre le fichier avec bloc-note on trouve des boux qu'on peux lire,est ce que ça ne doit pas être des suites des 0 et 1?
2.les données qu'on a rangé dans ces tables doivent être directement écrites dans des fichiers binaires, faute de temps on a pensé à les ranger dans des tables puis les stocker dans ces fichiers binaires, est ce qu'il a un moyen de stocker ces données dans le fichier sans garder la structure de la table et pouvoir les recuperer et les manipuler dans un autre pg sans soucis(si comme s'elles été criées dans le mm pg)?une méthode plus optimale qui nous permet de gagner plus de temps (celui de l'accés à ces tables aprés les avoir recupérer).merci beaucoup
cormandyr
Messages postés600Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention 8 juillet 201611 28 juin 2012 à 09:32
concernant le point 1,
non, lorsque tu ouvres un fichier avec le bloc note, il ne va pas te montrer juste des 1 et des 0... le programme va lire ton fichier octet par octet, autrement dit caractère par caractère et afficher le caractère représenter par cet octet...
pour le deuxieme point, j'ai compris que vous triez le tableau avant de l'écrire dans le fichier... et tu aimerais savoir s'il est possible d'écrire le tableau sans tenir compte de ce tri....
c'est ça?
cs_cila
Messages postés9Date d'inscriptionlundi 21 mai 2012StatutMembreDernière intervention16 septembre 2012 28 juin 2012 à 10:19
merci pour votre intervention
bon , pour le point1 je vais vous montrer les deux classes et ce que j'ai trouvé dans le fichier et vous me dites si c'est ordinaire.
pour le point 2: je ne veux pas trier un tableau, je vais vous donner un petit exemple sur mon application et vous allez comprendre:
j'ai une collection de documents parlant de java, je vais extraire document par document et dans chaque document je parcours ligne par ligne pour extraire les termes qui vont représenter chaque document (sans prendre en compte les mots vides: les articles ,les [color=red]propositions ...etc car ils ne pouvent pas représenter un document du fait qu'ils existent dans tous les documents
Normalement à chaque fois que j'extrais un terme je dois lesauvgarder dans un fichier binaire est compris la taille chaque document et toutes les informations necessaires, mais on a compris tard que je dois proceder ainsi, j'ai stocké ces données dans des tables HashMap puis dans des fichiers binaires.
Quand vous saisissez la requête: [le langage de programmation java] moi je dois acceder à ces fichiers pour comparer les terme: langage, programmation et java aux termes présents dans ces fichiers pour vous renvoyer les resultats (documents ) que vous cherchez
en résumé le stockage dans des fichiers binaires est meilleur à celui dans des Bases de Données,ce doit être la conclusion de notre travail,
Je m'excuse de vous avoir encombrer l'esprit , la serialisation permet de recuperer les tables donc je vais perdre un peu de temps quand je vais acceder à la table (je veux recupere directement les données et faire la comparaison avec la requête).merci encore une fois.
File fichier = new File ("lefichier");
ObjectInputStream in = new ObjectInputStream(new FileInputStream( fichier));
HashMap<String,Integer> map2 = (HashMap<String, Integer>) in.readObject();
in.close();
// Affichage
for (Map.Entry<String, Integer> e : map2.entrySet())
System.out.printf("%s\t%d\n",e.getKey(),e.getValue());
}
}
}
voici ce que je trouve dans le fichier'' si je l'ouvre avec bloc note:
¬í sr java.util.HashMapÚÁÃ`Ñ F
loadFactorI thresholdxp?@ w t Totosr java.lang.Integerâ ¤÷‡8 I valuexr java.lang.Number†¬•”à‹ xp t Titisq ~ Èt Tatasq ~ {x
Du coup, si tu ne veux pas sérializer tes Hashtables directement dans tes fichiers, pourquoi ne pas enregistrer juste ce qu'elles contiennent ? Par exemple si tu as une Hashtable<String, Long>, pourquoi ne pas parcourir cette table et écrire dans le fichier chaque String et chaque Long les uns à la suite des autres ? Si j'ai pas saisis quelque chose à tes explications, dis-le^^
Pour ce qui est de ton fichier, je le trouve un peu curieux. Si tu veux, quand tu écrits quelque chose dans un fichier, tu as deux possibilités. Soit tu écrits en mode texte, ce qui te permet de voir "lisiblement" le contenu de ton fichier, soit tu écris en binaire, comme c'est le cas. L'avantage du binaire, c'est que les accès en lecture sont bien plus rapides qu'avec l'autre mode. Par exemple, si tu as un Integer dans un fichier binaire, tu as des méthodes toutes prêtes faites qui vont lire le nombre d'octets nécessaires pour te renvoyer un Integer. Si jamais tu avais mis cette valeur entière en mode texte, ça aurait été à toi de lire caractère par caractère, ce qui est nettement moins optimisé. Lorsque tu ouvres un fichier binaire, tu te retrouves souvent face à une petite bouillie de tout. Le plus souvent, c'est l'éditeur que tu utilises qui essaye de traduire tout ça. Parfois ça marche, parfois c'est incompréhensible.
Tu vas juste pouvoir modifier ton main pour vérifier un truc ? Car justmeent, avec ce que je peux lire, je me demande si tu t'es pas pris un exception du genre NumberFormatException. Corrige ton main comme ci dessous, c'est plus propre :
public static void main( String [] args ){
try {
// ton code dans ton main précédent
} catch (Exception e){
e.printStackTrace();
}
}
--
Pylouq (Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
cs_cila
Messages postés9Date d'inscriptionlundi 21 mai 2012StatutMembreDernière intervention16 septembre 2012 8 juil. 2012 à 11:43
bonjour, j'ai ajouté le bloc try catch mais ça change rien le contenu du fichier reste le même.
dans le premier code que j'ai posté j'ai essayé de sauvgarder les elements sans la table,bon c'est juste un exemple et le problème c'est qu'il sauvgarde que la dérnière valeur.
je pense qu'à présent j'ai pas le choix j'utilise la sérialisation