Partage
  • Partager sur Facebook
  • Partager sur Twitter

FileNotFoundException pourquoi ?

Sujet résolu
    15 août 2017 à 19:05:41

    Bonjour,

    try
    	   	 {
    	   		 FileOutputStream fos =  new FileOutputStream("garage.txt");
    	   	 	 ObjectOutputStream oos = new ObjectOutputStream(fos);
    	   		 
    	   		 oos.writeObject(garage);
    	   		 System.out.println("Object serialisé avec succès");
    	   		 oos.close();
    	   		 fos.close();
    	   		 System.out.println("succes");
    	   		 
    	   	 } 
    	   	 catch (FileNotFoundException e) {
    	   		 System.out.println("probleme au niveau du flux de sortie");
    	   	 }catch (IOException e) {
    			System.out.println("probleme au niveau du flux d'objet de sortie");
    		 }
    		
    	   	System.out.print(garage.toString());
    	   	 

    je veux sérialiser une objet mais je ne comprend pas pourquoi il m'affiche "problème au niveau du flux de sortie"
    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    Pourquoi ? Pourquoi ? Pourquoi ?
    Anonyme
      15 août 2017 à 19:17:11

      Ben parce qu'il trouve pas ton fichier, difficile de l'ouvrir dans ces conditions.

      Il me semble que pour ouvrir un fichier situé dans le répertoire d'exécution en langage Java il faut faire "./garage.txt" et non pas juste "garage.txt", ensuite bien vérifier que le fichier se situe dans le répertoire d'exécution et le tour est joué.

      • Partager sur Facebook
      • Partager sur Twitter
        15 août 2017 à 20:17:31

        Et ben tu es partout toi :D
        oui je vois qu'il y  a une erreur à ce niveau là mais meme en faisait ./garage.txt ca ne change rien , et si a peut aider j'ai essayer de lancer le code en enlevant ligne par ligne et la ligne qui pose probleme  est :
        oos.writeObject(garage);

        mais si je fais laisse cette ligne seule ça fonctionne

        FileOutputStream fos =  new FileOutputStream("garage.txt");

        je ne comprend vraiment je suis les tutos et les cours mais il font tous comme moi . Peut etre une erreur d’inattention ?

        	 FileOutputStream fos =  new FileOutputStream("./garage.txt");
        	   	 	 ObjectOutputStream oos = new ObjectOutputStream(fos);
        	   		 
        	   		 //oos.writeObject(garage);
        	   		 System.out.println("Object serialisé avec succès");
        	   		 oos.close();
        	   		 fos.close();
        	   		 System.out.println("succes");

        et cela m'affiche le "succès" ! ma classe garage est pourtant bien serializable

        package fr.voiture;
        import java.io.Serializable;
        import java.util.ArrayList;
        
        
        public class Garage implements Serializable{
        	protected ArrayList<Vehicule> vehiculeListe = new ArrayList<Vehicule>();
        	
        	
        	public Garage()
        	{
        		
        		for(int i=0;i<25;i++)
        			System.out.print("*");
        		System.out.print("\n* Garage OpenClassrooms *\n");
        		for(int i=0;i<25;i++)
        			System.out.print("*");
        		System.out.print('\n');
        		
        	}
        	public String toString()
        	{
        		
        		String str = "";
        		
        		for (Vehicule liste : vehiculeListe)
        		{
        			
        			str +=  liste.toString() + '\n';
        		}
        		return str;
        	}
        	public void addVoiture(Vehicule voit)
        	{
        		(this.vehiculeListe).add(voit);
        	}
        }
        


        en plus le cours Openclassrooms me montre tout autre chose il n'appelle meme pas le fileOutputStream

            ObjectInputStream ois;
        
            ObjectOutputStream oos;
        
            try {
        
              oos = new ObjectOutputStream(
        
                      new BufferedOutputStream(
        
                        new FileOutputStream(
        
                          new File("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();
        
                    
        
              //On récupère maintenant les données !
        
              ois = new ObjectInputStream(
        
                      new BufferedInputStream(
        
                        new FileInputStream(
        
                          new File("game.txt"))));






        -
        Edité par PseudoSimple 15 août 2017 à 21:28:09

        • Partager sur Facebook
        • Partager sur Twitter
        Pourquoi ? Pourquoi ? Pourquoi ?
        Anonyme
          15 août 2017 à 22:42:26

          "Je suis partout" : Je suis tenté de dire que toi aussi !

          Laisse donc "./garage.txt", au moins on est sûrs que ça fonctionne (en tout cas je n'ai jamais eu de problème).

          Change tes System.out.println("blabla") par e.printStackTrace() pour connaître les détails : quelle exception et à quelle ligne. Tu posteras ces détails et on va trouver ce qui cause l'exception.

          • Partager sur Facebook
          • Partager sur Twitter
            15 août 2017 à 22:54:29

            ah

            c'est à ça que servais la fonctione.printStackTrace() , honte à moi je pensais qu'elle stockait dans un fichier les erreurs , j’aurais dû m'attarder dessus enfin bref voici voilà les erreurs  . Je fais des recherches en attendant ta réponse.

            java.io.NotSerializableException: fr.voiture.MoteurEssence
                at java.io.ObjectOutputStream.writeObject0(Unknown Source)
                at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
                at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
                at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
                at java.io.ObjectOutputStream.writeObject0(Unknown Source)
                at java.io.ObjectOutputStream.writeObject(Unknown Source)
                at java.util.ArrayList.writeObject(Unknown Source)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
                at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
                at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
                at java.io.ObjectOutputStream.writeObject0(Unknown Source)
                at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
                at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
                at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
                at java.io.ObjectOutputStream.writeObject0(Unknown Source)
                at java.io.ObjectOutputStream.writeObject(Unknown Source)
                at fr.garage.Main.main(Main.java:40)

            edit solution : ok, l'erreur parle d'elle même et j'ai fais quelques recherches , il y avais des class non Serializable je ne pensais pas que si la class utilisais

            protected ArrayList<Vehicule> vehiculeListe = new ArrayList<Vehicule>();

            il fallait que je rende Serializable la classe Vehicule aussi .

            Merci de ton aide ! ça m'affiche maintenant succès  !

            -
            Edité par PseudoSimple 15 août 2017 à 23:02:12

            • Partager sur Facebook
            • Partager sur Twitter
            Pourquoi ? Pourquoi ? Pourquoi ?

            FileNotFoundException pourquoi ?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown