Pour la représentation de texte, je vous recommande de choisir un peu de personnages qui sont très peu probable de se produire dans vos cordes, puis la sortie d'un fichier CSV avec les personnages comme des séparateurs, des citations, des terminateurs, et s'échappe. Essentiellement, chaque ligne (désigné par le terminator, car sinon il pourrait y avoir de la ligne de fin de caractères dans une chaîne) serait le premier CSV "champ" la clé de l'entrée dans la table de hachage, comme le deuxième champ, la valeur pour elle.
Une approche plus simple dans le même sens serait de désigner un caractère arbitraire, dire que la barre oblique inverse \, comme le caractère d'échappement. Vous aurez à double barres obliques inverses quand ils se produisent dans une chaîne, et d'exprimer dans d'échappement en forme de l'onglet (\t) et de fin de ligne ('\n); ensuite, vous pouvez utiliser un vrai (pas des séquences d'échappement) caractère de tabulation comme séparateur de champ entre les deux champs de la clé et de la valeur), et un réel (et non des séquences d'échappement) de fin de ligne à la fin de chaque ligne.
C'est un approuch pour imprimer un hastable, mais je veux dire écrire la table de hachage en fichier txt j'utilise BufferedWriter writer = new BufferedWriter(new FileWriter(resultOutputFile)); writer.écrire(googleHashTableResult); mais il hava une erreur :une erreur de La méthode write(int) dans le type BufferedWriter n'est pas applicable pour les arguments FileWriter est une sous-classe de OutputStreamWriter. BufferedWriter ne l'est pas. Ne passe pas dans un BufferedWriter, passer dans un FileWriter. Si ce n'est pas ce que vous voulez, puis de modifier le code en conséquence. Merci pour votre réponse j'ai approuch comme vous dites ! Quelque chose comme ça OutputStreamWriter writer = new OutputStreamWriter(os); BufferedWriter tampon = new BufferedWriter(écrivain); for(Entrée<String, String> obj: googleHashTableResult.entrySet()) { writer.écrire(obj.getKey()); writer.écrire(saut de ligne); writer.écrire(obj.getValue()); } écrivain.close(); tampon.close();
Pour les I/O de la partie, vous pouvez utiliser un new PrintWriter(new File(filename))). Il suffit d'appeler le println méthodes comme vous le feriez System.out, et n'oubliez pas de close() par la suite. Assurez-vous que vous gérez tout IOException gracieusement.
Si vous avez un format spécifique, vous devez l'expliquer, mais sinon, une simple for-each boucle sur les table de hachage.entrySet() est tout ce que vous devez parcourir les entrées de la Hashtable.
Par ailleurs, si vous n'avez pas besoin de la synchronized fonctionnalité, un HashMap<String,String> serait probablement mieux qu'un Hashtable.
Voici un exemple simple de mettre des choses ensemble, mais en omettant d'un solide IOException de manutention pour plus de clarté, et à l'aide d'un simple format:
import java.io.*;import java.util.*;publicclassHashMapText{publicstaticvoid main(String[] args)throwsIOException{//PrintWriter out = new PrintWriter(System.out);PrintWriter out =newPrintWriter(newFile("map.txt"));Map<String,String> map =newHashMap<String,String>();
map.put("1111","One");
map.put("2222","Two");
map.put(null,null);for(Map.Entry<String,String> entry : map.entrySet()){
out.println(entry.getKey()+"\t=>\t"+ entry.getValue());}
out.close();}}
L'exécution de cette sur ma machine génère un map.txt contenant trois lignes:
null=>null2222=>Two1111=>One
Comme un bonus, vous pouvez utiliser la première déclaration et l'initialisation de out, et d'imprimer les mêmes à la sortie standard au lieu d'un fichier texte.
Les méthodes de cette classe ne jetez jamais les I/O des exceptions, bien que certains de ses constructeurs mai. Le client peut se renseigner pour savoir si des erreurs se sont produites en invoquant checkError().
Cela échouera sur une touche qui fait référence à une valeur null avec une NullPointerException. Rappelez-vous, les Cartes ont les clés qui font référence à des entrées qui peuvent être null. vérifiez de nouveau. Merci pour la mise à jour. Doit être la souffrance de codage trop sur la défensive, ce qui généralement n'est pas une mauvaise chose.
Ce magasins de la table de hachage (ou la Carte) comme un fichier de propriétés. Vous pouvez utiliser les Propriétés de la classe à charger les données de revenir à nouveau.
Il une erreur de La méthode write(int) dans le type BufferedWriter n'est pas applicable pour les arguments (Hashtable<String,String>) Oh, désolé. Mise à jour de la réponse.
Puisque vous n'avez pas toutes les exigences pour le format de fichier, je ne voudrais pas créer un personnalisé. Suffit d'utiliser quelque chose de standard. Je recommande l'utilisation de json pour que!
Alternatives comprennent xml et csv, mais je pense que json est la meilleure option ici. Csv ne gère pas les types complexes comme avoir une liste dans l'une des clés de votre carte et xml peut être assez complexe à coder/décoder.
Vous pouvez utiliser d'autres json de la bibliothèque en tant que bien, mais je pense que celui-ci correspond à votre besoin.
Ok merci de votre réponse. J'ai une question à propos de jonson tableau. Quand j'utilise l'api de google à la requête d'une chaîne et obtenir le résultat. Chaîne sérialisée = JSONValue.toJSONString(yourMap); Mais quand je montre le résultat par Jeditor, il ne peut pas transflectif la uicode (en Vietnamien ), mais yahoo recherche reult peut . Montrer ce qui est de l'encodage de résultat de google seachengine ? et comment puis-je affichent le résultat quand il est en vietnamien ? tiendv, Désolé pour la réponse tardive. C'est une autre question, vous devez une réponse ici et d'ouvrir une autre question pour celui-ci. Cheers, Merci! Cela a sauvé ma journée!
Pour la représentation de texte, je vous recommande de choisir un peu de personnages qui sont très peu probable de se produire dans vos cordes, puis la sortie d'un fichier CSV avec les personnages comme des séparateurs, des citations, des terminateurs, et s'échappe. Essentiellement, chaque ligne (désigné par le terminator, car sinon il pourrait y avoir de la ligne de fin de caractères dans une chaîne) serait le premier CSV "champ" la clé de l'entrée dans la table de hachage, comme le deuxième champ, la valeur pour elle.
Une approche plus simple dans le même sens serait de désigner un caractère arbitraire, dire que la barre oblique inverse
\
, comme le caractère d'échappement. Vous aurez à double barres obliques inverses quand ils se produisent dans une chaîne, et d'exprimer dans d'échappement en forme de l'onglet (\t
) et de fin de ligne ('\n
); ensuite, vous pouvez utiliser un vrai (pas des séquences d'échappement) caractère de tabulation comme séparateur de champ entre les deux champs de la clé et de la valeur), et un réel (et non des séquences d'échappement) de fin de ligne à la fin de chaque ligne.OriginalL'auteur Alex Martelli
Comment sur une ligne pour chaque entrée, et deux chaînes séparées par une virgule? Un peu comme:
garder les guillemets et vous pourrez écrire les clés qui renvoient à des entrées null trop, comme
À fait le produit de la table, vous pouvez utiliser un code similaire à:
FileWriter est une sous-classe de OutputStreamWriter. BufferedWriter ne l'est pas. Ne passe pas dans un BufferedWriter, passer dans un FileWriter. Si ce n'est pas ce que vous voulez, puis de modifier le code en conséquence.
Merci pour votre réponse j'ai approuch comme vous dites ! Quelque chose comme ça OutputStreamWriter writer = new OutputStreamWriter(os); BufferedWriter tampon = new BufferedWriter(écrivain); for(Entrée<String, String> obj: googleHashTableResult.entrySet()) { writer.écrire(obj.getKey()); writer.écrire(saut de ligne); writer.écrire(obj.getValue()); } écrivain.close(); tampon.close();
OriginalL'auteur Edwin Buck
Pour les I/O de la partie, vous pouvez utiliser un
new PrintWriter(new File(filename)))
. Il suffit d'appeler leprintln
méthodes comme vous le feriezSystem.out
, et n'oubliez pas declose()
par la suite. Assurez-vous que vous gérez toutIOException
gracieusement.Si vous avez un format spécifique, vous devez l'expliquer, mais sinon, une simple
for-each
boucle sur lestable de hachage.entrySet()
est tout ce que vous devez parcourir les entrées de laHashtable
.Par ailleurs, si vous n'avez pas besoin de la
synchronized
fonctionnalité, unHashMap<String,String>
serait probablement mieux qu'unHashtable
.Questions connexes
Voici un exemple simple de mettre des choses ensemble, mais en omettant d'un solide
IOException
de manutention pour plus de clarté, et à l'aide d'un simple format:L'exécution de cette sur ma machine génère un
map.txt
contenant trois lignes:Comme un bonus, vous pouvez utiliser la première déclaration et l'initialisation de
out
, et d'imprimer les mêmes à la sortie standard au lieu d'un fichier texte.Voir aussi
java.io.PrintWriter
APIvérifiez de nouveau.
Merci pour la mise à jour. Doit être la souffrance de codage trop sur la défensive, ce qui généralement n'est pas une mauvaise chose.
OriginalL'auteur polygenelubricants
Vous pouvez essayer
Ce magasins de la table de hachage (ou la Carte) comme un fichier de propriétés. Vous pouvez utiliser les Propriétés de la classe à charger les données de revenir à nouveau.
OriginalL'auteur Peter Lawrey
Oh, désolé. Mise à jour de la réponse.
OriginalL'auteur Enno Shioji
Puisque vous n'avez pas toutes les exigences pour le format de fichier, je ne voudrais pas créer un personnalisé. Suffit d'utiliser quelque chose de standard. Je recommande l'utilisation de json pour que!
Alternatives comprennent xml et csv, mais je pense que json est la meilleure option ici. Csv ne gère pas les types complexes comme avoir une liste dans l'une des clés de votre carte et xml peut être assez complexe à coder/décoder.
À l'aide de json simple à titre d'exemple:
et puis il suffit d'enregistrer la chaîne de votre fichier (ce qui n'est pas spécifique à votre domaine, soit à l'aide d'Apache Commons IO):
Pour lire le fichier:
Vous pouvez utiliser d'autres json de la bibliothèque en tant que bien, mais je pense que celui-ci correspond à votre besoin.
tiendv, Désolé pour la réponse tardive. C'est une autre question, vous devez une réponse ici et d'ouvrir une autre question pour celui-ci. Cheers,
Merci! Cela a sauvé ma journée!
OriginalL'auteur Jonas Fagundes