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

Langage Java Discussion :

serialisation et lecture dans fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Par défaut serialisation et lecture dans fichier
    Bonjour je voudrais avoir un peu d'aide concernant la serialization et lecture dans un fichier, voici mon code
    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
     
    try
    		{
        		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(jobsFile));
        		while(jobsFile.length() != -1)
        		{
        			TestObject job = (TestObject)ois.readObject();
        			listJob.add(job);
        		}
    		}
        	catch(IOException e)
    		{
        		System.out.println("IOException : ");
        		e.printStackTrace();
    		}
    J'ai un EOFException qui est lancé, je me doute que cela provient de mon while, donc je voudrais savoir comment lire tout les objets du fichiers jusqu'au dernier. Qu'est ce qu'il faut mettre dans la boucle while?
    Merci

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    En dessous du bloc "catch(IOException ioe)", tu rajoutes un "catch(EOFException eofe)"

    [EDIT] tu devrais pas rajouter un "catch(ClassNotFoundException cnfe)" lors de ton appel à readObject ??

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par iohack
    En dessous du bloc "catch(IOException ioe)", tu rajoutes un "catch(EOFException eofe)"
    c'est au dessus, sinon, étant donné que EOFException dérive de IOException, l'exception sera attrapée dans le premier catch et ne passera jamais dans le second (d'ailleur le compilateur ne te laissera pas faire ).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Au temps pour moi

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Tu peux utiliser la méthode available() de la classe ObjectInputStream.

    Autre remarque : pense à fermer ton flux dans un bloc finally

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(jobsFile));
        try {
            while(ois.available() > 0) {
                TestObject job = (TestObject)ois.readObject();
                listJob.add(job);
            }
        } finally {
            ois.close();
        }
    } catch(IOException e) {
        System.out.println("IOException : ");
        e.printStackTrace();
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par le y@m's
    Tu peux utiliser la méthode available() de la classe ObjectInputStream.
    Je suis allez un peu trop vite , en fait cela ne marche pas, il vaut mieux utiliser la EOFException.
    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
    try {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(jobsFile));
        try {
            Boolean b = true;
            while(b) {
                TestObject job = (TestObject)ois.readObject();
                listJob.add(job);
            }
        } finally {
            ois.close();
        }
    } catch(EOFException e) {
        System.out.println("Fin du fichier atteint");
    } catch(IOException e) {
        System.out.println("IOException : ");
        e.printStackTrace();
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Il serait peut-être même plus élégant de gérer l'EOFException comme suit :
    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
    try {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(jobsFile));
        try {
            Boolean b = true;
            while(b) {
                try {
                    TestObject job = (TestObject)ois.readObject();
                    listJob.add(job);
                catch(EOFException e) {
                    b = false;
                } 
            }
        } finally {
            ois.close();
        }
    } catch(IOException e) {
        System.out.println("IOException : ");
        e.printStackTrace();
    }
    Sinon, si c'est toi qui gère la sérialisation, pourquoi ne pas directement sérialiser la List de tes TestObject ? ainsi tu n'aurais plus de boucle puisque tu désérialiserais directement la List.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  8. #8
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Par défaut
    Salut l'exception ne se lance plus par contre je sérialise 2 objets dans un fichier et dans ma liste je me retrouve qu'avec le premier objet?
    Voici le code complet :
    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
     
    File jobsFile = new File("c:\\Dossiers\\TestObject.txt");
        	List listJob = new ArrayList();
     
        	if(jobsFile.length() == -1)
        	{
        		//Création d'une liste d'objet test.
        		TestObject job1 = new TestObject();
        		job1.setNom("QJMAIL");
        		job1.setEtape("JSGD_03");
        		job1.setMachine("SWR01");
        		job1.setOddjobXML(new File("C:\\Dossiers\\projet_Open\\jobSamples\\examples\\userguide\\first1.xml"));
     
        		TestObject job2 = new TestObject();
        		job2.setNom("DJACTIF");
        		job2.setEtape("JSGD_01");
        		job2.setMachine("SWR04");
        		job2.setOddjobXML(new File("C:\\Dossiers\\projet_Open\\jobSamples\\examples\\userguide\\first2.xml"));
     
        		TestObject.saveToFile(job1, jobsFile);
        		TestObject.saveToFile(job2, jobsFile);
    		}
     
        	try
    		{
        		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(jobsFile));
        		try
    			{
        			boolean b = true;
        			try
    				{
        				while(b)
                		{
                			TestObject job = (TestObject)ois.readObject();
                			//String name = job.getNom();
                			//System.out.println(name);
                			listJob.add(job);
                		}
    				}
        			catch(EOFException e)
    				{
    	    			b = false;
    				}
    			}
        		finally
    			{
        			ois.close();
    			}
     
    		}
        	catch(IOException e)
    		{
        		System.out.println("IOException : ");
        		e.printStackTrace();
    		}
     
     
        	request.setAttribute(Constants.LIST_JOB, listJob);
     
     
            // Finish with
            return (mapping.findForward("listeDiff"));
    si tu vois d'autre chose dans le code qui ne sont pas correct n'hésite pas à me le faire remarqué.

  9. #9
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    A mon avis, le problème vient du fait que tu appel deux fois ta méthode saveToFile() (dont tu aurais pu mettre le code ) et je suppose que l'un des deux objet doit être écrasé dans le fichier.

    Comme je te l'ai dit dans mon précédent post, la meilleure solution est encore de sérialiser directement la List.
    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
     
    List listJob = new ArrayList();
    try {
        File jobsFile = new File("c:\\Dossiers\\TestObject.txt");
        if(jobsFile.length() == -1) {
            //Création d'une liste d'objet test.
            TestObject job1 = new TestObject();
            job1.setNom("QJMAIL");
            job1.setEtape("JSGD_03");
            job1.setMachine("SWR01");
            job1.setOddjobXML(new File("C:\\Dossiers\\projet_Open\\jobSamples\\examples\\userguide\\first1.xml"));
            TestObject job2 = new TestObject();
            job2.setNom("DJACTIF");
            job2.setEtape("JSGD_01");
            job2.setMachine("SWR04");
            job2.setOddjobXML(new File("C:\\Dossiers\\projet_Open\\jobSamples\\examples\\userguide\\first2.xml"));
     
            List saveList = new ArrayList();
            saveList.add(job1);
            saveList.add(job2);
     
            // sérialisation de la List
            ObjectOutpuStream oos = new ObjectOutputStream(new FileOutpuStream(jobsFile));
            try {
                oos.writeObject(saveList);
                oos.flush();
            } finally {
                oos.close;
            }
        }
     
        // désérialisation de la List
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(jobsFile));
        try {
            listJob = (List) ois.readObject();
        } finally {
            ois.close();
        }
    } catch(IOException e) {
        System.out.println("IOException : ");
        e.printStackTrace();
    }
    request.setAttribute(Constants.LIST_JOB, listJob);
    // Finish with
    return (mapping.findForward("listeDiff"));
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. Petite base de donnée en C (lecture dans fichier)
    Par oc_alex86 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/11/2008, 18h03
  2. Lecture dans fichier excel
    Par jojo456 dans le forum Débuter
    Réponses: 16
    Dernier message: 30/05/2008, 11h06
  3. Erreur dans la lecture dans fichier M-file
    Par Pedrozito dans le forum MATLAB
    Réponses: 7
    Dernier message: 22/05/2008, 16h16
  4. ajax lecture dans fichier xml sans serveur
    Par TERRIBLE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/03/2008, 12h19
  5. [XPATH] problème lecture dans fichier XML
    Par DiamonDonald dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/02/2008, 09h57

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