Comment écrire Objet Sérialisé que lisible par l'Homme d'un fichier Txt
Je veux écrire des objets en forme lisible par l'homme dans un fichier TXT , le fichier est enregistré comme un objet sérialisé avec des caractères indésirables.
Veuillez me suggérer comment réécrire le même programme pour l'enregistrement en lisible fichier TXT
import java.io.*;
class book implements Serializable
{
String name;
String author;
int nop;
int price;
int discount;
void getDiscount()
{
int finalprice=price-((price/discount));
System.out.println("Final price after discount="+finalprice);
}
public String toString()
{
return name+author+nop+price+discount;
}
}
class fileio
{
public static void main(String args[])
{
MainClass mainObject=new MainClass();
mainObject.writeToFile();
book javabook=new book();
javabook.name="Java unleashed";
javabook.author="someone";
javabook.nop=1032;
javabook.price=450;
javabook.discount=10;
javabook.getDiscount();
}
public void writeToFile()
{
try
{
File file=new File("JavaBook1.txt");
FileWriter fw=new FileWriter(file.getAbsoluteFile());
BufferedWriter bw=new BufferedWriter(fw);
bw.write(book.toString());
bw.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Définir "lisible".
sans caractères indésirables dans ce format: Java Unleashed,quelqu'un,1032,450,10 tout comme FileWriter("Hello World!") Format De Chaîne De Caractères
Vous aurez à changer votre int champs pour les champs de type Chaîne pour une sérialisation pour être lisible par l'homme. Comme les réponses de dire, vous écrivez une méthode dans votre Livre de classe qui écrit les valeurs de champ de Livre au format XML ou texte.
Wll quelqu'un post les modifications à effectuer sur le code , par l'affichage édité code?
Vérifier ma réponse, il montre, entre autres choses, comment mettre en œuvre
sans caractères indésirables dans ce format: Java Unleashed,quelqu'un,1032,450,10 tout comme FileWriter("Hello World!") Format De Chaîne De Caractères
Vous aurez à changer votre int champs pour les champs de type Chaîne pour une sérialisation pour être lisible par l'homme. Comme les réponses de dire, vous écrivez une méthode dans votre Livre de classe qui écrit les valeurs de champ de Livre au format XML ou texte.
Wll quelqu'un post les modifications à effectuer sur le code , par l'affichage édité code?
Vérifier ma réponse, il montre, entre autres choses, comment mettre en œuvre
toString()
.OriginalL'auteur violet kiwi | 2013-05-29
Vous devez vous connecter pour publier un commentaire.
Voir si-dessous permet de résoudre votre but
surcharger la méthode toString() de la classe d'Objet pour le retour de votre objet, puis écrire la sortie de texte fichier avec fichier écrivain
Si vous voulez avoir xml type de representatio, aller pour JAXB approche
Mise à jour:-
s'il vous plaît ignorer la syntaxe/les erreurs de compilation dans le programme ci-dessous que je ne l'ai pas testé, mais il va vous donner une brève idée
Maintenant dans votre classe principale
voir ma mise à jour pour une approche détaillée
erreur de compilation: Erreur <identificateur> attendu dans le Fichier fichier= ligne..
je ne suis pas en face de mon système. J'ai oublié de l'envelopper dans un bloc try catch. Voir mise à jour d'un
Je ne vois pas de réel sérialisation ici. C'est seulement à l'aide de la méthode toString() avec aucun moyen de dé-sérialiser...
OriginalL'auteur M Sach
Vous pourriez sérialiser en tant que XML en utilisant JAXB ou XStream. XML est plus lisible par l'homme en tant que données binaires alors peut-être que XML est ok pour vous. En supposant que vous aussi vous voulez désérialiser vos données c'est une bonne option.
OriginalL'auteur Kai
Cela dépend vraiment de ce que vous avez besoin du fichier pour le faire. Si vous ne souhaitez pas utiliser les objets
toString()
représentations, vous devez extraire le contenu de chaque objet, et de venir avec un délimiteur, et les utiliser de séparateur pour séparer vos données (book
(s)). Remarque, vous auriez besoin d'un autre séparateur pour séparer les données dans chaque objet. Vous pouvez standardiser la façon dont vous écrivez dans le fichier, de sorte que les éléments individuels sont facilement récupérées. Si vous pouvez venir avec un séparateur, vous pouvez le lire dans les données pour unbook
comme unString
et l'utilisationsplit()
de mettre chaque attribut dans un tableau fente. Si c'est juste pour les gens à lire, vous pouvez faire quelque chose de similaire, mais formatés bien, afin que les gens sachent ce qu'ils sont en train de lire. L'objettoString()
peut être bon pour que:Pour référence, voici un
toString()
de votre objet:Qui était juste un exemple, mais si vous mettez cela dans votre livre de classe et puis essayez d'imprimer un livre-objet, vous obtiendrez son
name author price
comme l'impression.Aussi, vous devriez utiliser des constructeurs/méthodes pour affecter des valeurs à des objets, les membres de l'instance, qui devrait être
private
.Idéalement, je pense que vous devriez utiliser xml pour votre sérialisation; voir XStream.
OriginalL'auteur Steve P.
Deux options:
dans votre code:
produira:
c'est gentil pour le débogage. Si vous avez seulement des champs simples, il sera assez; si vous faites référence à un autre de haricots à l'intérieur (et une autre et une autre...), il imprimera sa méthode toString (), de sorte que vous pouvez surcharger la méthode toString pour tous vos valeur/objets de transfert avec ce code afin d'avoir de belles méthodes de lecture pour tous).
ce que je fais habituellement est de s'étendre à partir d'une base de haricots de classe:
l'extension de ToStringReadable allons faire tous vos haricots lisible par l'homme à des fins de débogage.
Dans votre code (noter que vous devrez publier vos attributs avec getter/setter(s), c'est une bonne pratique de sorte que même mieux):
Il va produire lisible par l'homme de sortie également, dans ce cas, JSON:
JSON à l'aide de l'approche que vous n'avez pas besoin de remplacer les méthodes toString comme il apparaîtra à l'impression de tous vos domaines, mais c'est plus lourd en termes de performance, de sorte que pour le débogage d'utiliser la première méthode.
Espère que cette aide,
OriginalL'auteur marmots
Vous pouvez sérialiser /desirialize votre instances de classe XML avec JAXB ou JavaBeans. Dans les deux cas, vous avez besoin pour préparer votre classe - utiliser des annotations ou des setters /getters.
OriginalL'auteur Evgeniy Dorofeev