IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Fichier intégralement en mémoire [DOM]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut Fichier intégralement en mémoire
    Bonjour, mon application utilise des ressources (fichiers XMLs) cryptées.

    Ainsi, je dois les charger à chaque démarrage de mon appli.

    Pour le moment, je décrypte le fichier dans un autre fichier sur le disque, et le lit, et quand le travail est terminé, je supprime le fichier dernièrement créé. Je fais de même lors de l'encryptage.

    Je souhaite supprimer cette étape. Pour cela, il serait interessant de monter le fichier en clair en mémoire, et je souhaite le lire comme si c'était un fichier quelconque.


    Voici mes méthodes pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      public byte[] decrypter(String password, , String entree) {
        ....
      }
    Dans cette fonction ci dessus, je prends en entrée un nom de fichier (le fichier crypté) et je le décrypte. Cette fonction rend un tableau de byte, qui est le texte en clair. Je pense être dans la bonne voie, mais comment modifier le code suivant pour arriver à mes fins?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      public Document ouvrirXML(String filename) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.parse(new File(filename));
     
          return doc;
        }
        catch (Exception ex) {
          System.out.println("Le fichier XML est invalide. [" + ex.getMessage() + "]");
          return null;
        }
      }

    Merci pour votre aide et vos conseils



    Cordialement,


    Billy

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    A la place de la méthode parse(File), tu peux utiliser la méthode parse(InputStream) de ton DocumentBuilder. Ainsi, il te suffit de lui passer un ByteArrayInputStream initialisé avec le tableau de byte retourné par ta méthode decrypter()...


    a++

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Ou bien suivant la structure XML de ton fichier, tu utilises un parser SAX qui te permet de récuperer les données que tu souhaites, et de les décrypter "à la volée" au chargement.

    Moi j'utilise la même architecture que toi, sauf que mon fichier XML n'est pas crypté.

  4. #4
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Merci, cela marche parfaitement.

    J'ai essayé depuis ce matin d'implémenter l'enrigistrement en suivant cet exemple, mais je n'y arrive pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
      public byte[] enregistrerXML(UnElement noeudDocument) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.newDocument();
          doc.appendChild(unElementToElement(doc, noeudDocument));
          Source source = new DOMSource(doc);
     
     
          // Result resultat = new StreamResult(new File(filename));
          Result resultat = new StreamResult(new ByteArrayOutputStream());
     
          TransformerFactory tf = TransformerFactory.newInstance();
          Transformer t = tf.newTransformer();
          t.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
          t.transform(source, resultat);
     
          return ???;
        }
        catch (Exception ex) {
          System.out.println("L'enregistrement du document XML a échoué. [" + ex.getMessage() + "]");
          return ???;
        }
      }

    Merci

  5. #5
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    A y est, j'ai trouvé tout seul . Voici donc pour les futurs interessé(e)s:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
      public Document ouvrirXML(String filename) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.parse(new File(filename));
     
          return doc;
        }
        catch (Exception ex) {
          System.out.println("Le fichier XML est invalide. [" + ex.getMessage() + "]");
          return null;
        }
      }
     
      public Document ouvrirXML(byte[] file) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.parse(new ByteArrayInputStream(file));
     
          return doc;
        }
        catch (Exception ex) {
          System.out.println("Le fichier XML est invalide. [" + ex.getMessage() + "]");
          return null;
        }
      }
     
      public boolean enregistrerXML(String filename, Element noeudDocument) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.newDocument();
          doc.appendChild(noeudDocument);
          Source source = new DOMSource(doc);
          Result resultat = new StreamResult(filename);
          TransformerFactory tf = TransformerFactory.newInstance();
          URL fileURL = getClass().getResource("data/indenteur.xsl");
          StreamSource ss = new StreamSource(fileURL.openConnection().getInputStream());
          Transformer t = tf.newTransformer(ss);
          t.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
          t.transform(source, resultat);
     
          return true;
        }
        catch (Exception ex) {
          System.out.println("L'enregistrement du document XML a échoué. [" + ex.getMessage() + "]");
          return false;
        }
      }
     
      public byte[] enregistrerXML(Element noeudDocument) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.newDocument();
          doc.appendChild(noeudDocument);
          Source source = new DOMSource(doc);
          StreamResult resultat = new StreamResult(new ByteArrayOutputStream());
          TransformerFactory tf = TransformerFactory.newInstance();
          URL fileURL = getClass().getResource("data/indenteur.xsl");
          StreamSource ss = new StreamSource(fileURL.openConnection().getInputStream());
          Transformer t = tf.newTransformer(ss);
          t.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
          t.transform(source, resultat);
     
          ByteArrayOutputStream baos = (ByteArrayOutputStream) resultat.getOutputStream();
          return baos.toByteArray();
        }
        catch (Exception ex) {
          System.out.println("L'enregistrement du document XML a échoué. [" + ex.getMessage() + "]");
          return null;
        }
      }

    Ainsi, avec les byte[], je peux utiliser ma classe Encrypter/Decrypter, sans passer par le fichier texte claire temporaire.

    Billy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++.Net fichier mappés en mémoire
    Par XPits dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 04/03/2009, 10h50
  2. Fichier XML en mémoire
    Par rad_hass dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/12/2008, 11h04
  3. Fichier mapé en mémoire
    Par Hibou57 dans le forum Linux
    Réponses: 3
    Dernier message: 04/07/2007, 19h26
  4. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  5. [VB.NET] Fichier Txt en mémoire ?
    Par evlp2004@hotmail.com dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2006, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo