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

Entrée/Sortie Java Discussion :

Ecrire des objets dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut Ecrire des objets dans un fichier
    Bonjour
    J'essaye d'écrire dans un fichier quelques objets
    Quand j'exécute TCOSave3() j'ai l'erreur "java.io.NotSerializableException"

    Je suis sous MacOS Tahoe 26.2
    openjdk version "11.0.28" 2025-07-15 LTS
    OpenJDK Runtime Environment Corretto-11.0.28.6.1 (build 11.0.28+6-LTS)
    OpenJDK 64-Bit Server VM Corretto-11.0.28.6.1 (build 11.0.28+6-LTS, mixed mode)

    Merci pour votre aide
    Louis

    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
     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
     
    public class Game implements Serializable{
      private String nom, style;
      private double prix;
      public Game(String nom, String style, double prix) {
      this.nom = nom;
      this.style = style;
      this.prix = prix;
      }
      public String toString(){
      return "Nom du jeu : " + this.nom + "\n" +
      "Style de jeu : " + this.style + "\n" +
      "Prix du jeu : " + this.prix + "\n";
      }
    }
     
    public void TCOSave3() {
    //Nous déclarons nos objets en dehors du bloc try/catch
      ObjectOutputStream oos;
      try {
        oos = new ObjectOutputStream(
        new BufferedOutputStream(
        new FileOutputStream(
        new File(sketchPath+"game.txt"))));
        //Nous allons écrire chaque objet Game dans le fichier
        oos.writeObject(new Game("Assassin Creed", "Aventure", 45.69));
        oos.writeObject(new Game("Tomb Raider", "Plateforme", 23.45));
        oos.writeObject(new Game("Tetris", "Stratégie", 2.50));
        //Ne pas oublier de fermer le flux !
        oos.close();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 610
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 610
    Par défaut
    Salut est-il nécessaire d'imbriquer des new classes_systeme() alors qu'un simple new File() peut suffire ?

  3. #3
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Salut est-il nécessaire d'imbriquer des new classes_systeme() alors qu'un simple new File() peut suffire ?
    Bonjour
    D'abord merci d'avoir répondu
    Ceci est un simple test, l'imbrication est juste pour simplifier le code
    Créer un new File ne change rien, l'erreur est toujours là
    Louis

  4. #4
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    Je viens de tester sous Windows et j'ai la même erreur
    Merci popur votre aide
    Louis

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 592
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 592
    Par défaut
    Hello,

    j'ai fait un test "raisonnable" de ton code, et il ne m'indique pas cette erreur. Au contraire il me crée un fichier, que je peux ensuite lire avec un ObjectInputStream et qui me redonne les 3 objets tels que prévu.

    Mais bon, là le code que tu nous montres, il ne compile pas. Il n'a pas non plus de point de démarrage. Tu n'as fourni que des extraits que j'ai placés comme j'ai pu pour que ça marche. On ne sait pas comment toi tu as arrangé ces extraits.

    Au vu du message d'erreur que tu nous montres, j'imagine que tu as plusieurs classes nommées Game dans ton projet, et que celle que tu utilises dans TCOSave3() n'est pas celle que tu nous montres, à la place tu en utilises une autre qui elle n'implémente pas Serializable.

    Parmi les remarques prioritaires à faire, on notera que la sérialisation Java n'est pas du tout un format texte comme le serait du XML ou du JSON. C'est un format binaire opaque. Ce serait donc source de confusion de le mettre dans un fichier dont l'extension est .txt.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    D'abord merci pour ta patience

    Ce n'est pas le code de mon projet, c'est juste un extrait d'un livre pour tester la validité des opérations

    Est-ce que tu peux me fournir le code du test que tu as réalisé pour voir si cela fonctionne chez moi

    Mon projet est écrit en Java dans l'environnement Processing est-ce que tu connais ?

    Tout fonctionne correctement sauf ce code dont je veux m'inspirer pour sauvegarder mon projet
    Merci

    Louis

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 592
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 592
    Par défaut
    Citation Envoyé par sonata32 Voir le message
    Mon projet est écrit en Java dans l'environnement Processing est-ce que tu connais ?
    J'en entends parler de temps en temps mais ça ne va pas plus loin. A ma connaissance ça réutilise un peu Java mais ce n'est pas vraiment du Java, donc je ne suis pas sûr que le reste puisse te servir... Ni qu'il soit même capable de faire ce que tu demandes, ni qu'il soit capable de générer des messages d'erreur compréhensibles quand tu essaies.

    Pour la classe Game, elle est dans un fichier Game.java qui est comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    package org.thelvin;
     
    import java.io.Serializable;
     
    // ta classe Game telle que sans modification
    Ensuite j'ai créé un fichier RunSerializer.java :

    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
    package org.thelvin;
     
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
     
    public class RunSerializer {
     
      public static final String sketchPath = "sketches/";
     
      // ta méthode TCOSave3() copiée ici telle que sans modification
     
      public static void main(String[] args) {
        new RunSerializer().TCOSave3();
      }
    }
    Ensuite j'ai créé un dossier sketches à la racine de mon projet

    Enfin pour essayer si ça marche, le fichier RunDeserializer.java :

    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
    package org.thelvin;
     
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.nio.file.Files;
    import java.nio.file.Path;
     
    public class RunDeserializer {
     
      public static void main(String[] args) throws IOException, ClassNotFoundException {
        Path file = Path.of(RunSerializer.sketchPath + "game.txt");
        try(var is = Files.newInputStream(file); var ois = new ObjectInputStream(is)) {
          for(int i = 0; i < 3; i++) {
            Game game = (Game)ois.readObject();
            System.out.println(game);
          }
        }
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    Merci pour ton aide
    Processing est bien en Java, mon projet qui comprends un bon miller de lignes n'est écrit qu'en Java et jke n'ai aucun problème

    Merci pour ton code je vais tester cela

    Louis

  9. #9
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9

  10. #10
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    Hello

    J'ai testé suivant ton code mais j'ai toujours l'erreur

    Louis

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 592
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 592
    Par défaut
    Eh ben il y a fort à parier que Processing fait des choses qui sont incompatibles avec le système de sérialisation de Java (dont il faut bien admettre qu'il n'est d'ailleurs pas très bon et qu'il suffit de pas grand-chose pour lui causer des problèmes.)

    On pourra regretter que rien n'ait été fait pour qu'il produise des messages d'erreur plus utiles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Eh ben il y a fort à parier que Processing fait des choses qui sont incompatibles avec le système de sérialisation de Java (dont il faut bien admettre qu'il n'est d'ailleurs pas très bon et qu'il suffit de pas grand-chose pour lui causer des problèmes.)

    On pourra regretter que rien n'ait été fait pour qu'il produise des messages d'erreur plus utiles.
    Je pense que tu as raison, il faut que je trouve un autre moyen de réaliser ma sauvegarde
    S'il n'y avait que des types primitifs cela serait facile mais j'ai aussi des images à l'intérieur des objets
    Louis

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 592
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 592
    Par défaut
    Ce serait pas les images en question, qui produisent l'erreur, par hasard ? Il n'y a pas d'image dans l'exemple que tu as montré.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 9
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ce serait pas les images en question, qui produisent l'erreur, par hasard ? Il n'y a pas d'image dans l'exemple que tu as montré.
    J'ai testé sans les images et j'ai l'erreur
    Louis

Discussions similaires

  1. Ecrire puis lire des objets dans un fichier .txt
    Par Rick_Cplusplus dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2018, 21h29
  2. Ecrire et Lire des objets dans un fichier
    Par nnj46 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/04/2010, 14h43
  3. Ecrire des objets dans un fichier
    Par Edta dans le forum Langage
    Réponses: 2
    Dernier message: 14/05/2008, 04h29
  4. écrire des entiers dans un fichier
    Par seb__ dans le forum C
    Réponses: 3
    Dernier message: 15/10/2006, 18h32
  5. Ecrire un objet dans un fichier
    Par mikebranque dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2006, 13h39

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