Comment lire un LinkedHashMap écrit dans le fichier?

Itian:

Je veux lire une valeur particulière de LinkedHashMap écrit dans un fichier txt, mais montre « java.io.StreamCorruptedException: en-tête de flux incorrect: 7B495020 »

Pour écrire à LinkedHashMap j'ai essayé la méthode;

public void WriteBasicInfo(String name, String pass) throws IOException, ParseException {
    Map<String, String> m;
        try {
            m = new LinkedHashMap<String, String>();
            m.put("Name", name);
            m.put("Password", pass);

            BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_NAME, false));
            bw.write(m.toString());
            bw.flush();
            bw.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

Et il écrit avec succès dans le fichier. Mais quand Iam essayant de lire le hashmap ci-dessus en utilisant cette méthode

public void readBasicInfo() throws IOException, ParseException, InvocationTargetException, ClassNotFoundException 
{
        ObjectInputStream is = new ObjectInputStream(new FileInputStream(FILE_NAME));
        Map<String, String> myMap=(LinkedHashMap<String, String>) is.readObject();

        for(Map.Entry<String,String> m :myMap.entrySet()){
                 System.out.println(m.getKey()+" : "+m.getValue());
        //  String val1=m.get("Name"); 
        }     
     ois.close();
    }

il montre « java.io.StreamCorruptedException: en-tête de flux incorrect: 7B495020 », et aucune donnée est lu

J'ai essayé de lire toutes les entrées écrites dans hashmap, pour vérifier si elle est en train de lire ou non; mais en fait je veux juste lecture seule entrée « nom » stocké dans hashmap.

GhostCat de Monica C.:

Vous êtes simplement: l'écriture sous forme de chaîne, mais en relisant attendant un objet sérialisé binaire!

Vous savez, qui est comme: vous mettez un œuf dans une boîte, et vous vous attendez pouvez ouvrir cette boîte et versez le lait de celui-ci dans un verre! Ce travail de coutume.

Ici:

bw.write(m.toString());

Vous écrivez la carte dans ce fichier sous forme de chaîne brute. Cela signifie que votre fichier contient maintenant des chaînes lisibles par l'homme!

Mais alors vous faites:

Map<String, String> myMap=(LinkedHashMap<String, String>) is.readObject();

Ce qui attend à ce que le fichier contient un numéro de série des objets.

Longue histoire courte, ce sont vos options:

  1. continuez à écrire ces chaînes, mais vous devez implémenter votre propre analyseur qui lit les fichiers texte, et les transforme en objets dans les cartes
  2. au lieu d'écrire des chaînes de texte brut, utilisez une bibliothèque, comme gson ou jackson et sérialiser votre carte en tant que chaîne JSON (qui exige que toutes les clés / valeurs peuvent être sérialisés comme JSON)
  3. au lieu d'écrire du texte brut ou JSON, utilisez le mécanisme de sérialisation par défaut Java et serialize au contenu binaire qui exige que toutes les clés / valeurs implémentent l'interface Serializable. Voir ici pour un bon tutoriel comment faire en détail.

Ma recommandation: aller pour l'option 2 ou 3. 2 ajoute une dépendance à une bibliothèque 3ème partie, mais je pense qu'il est plus « commun » la pratique de nos jours.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=184884&siteId=1
conseillé
Classement