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

avec Java Discussion :

Import de classe java.io.FileInputStream


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Import de classe java.io.FileInputStream
    Bonjour,
    je connais assez bien Php et je débute en Java. J'ai installé eclipse 3.5.2 et j'ai commencé avec une classe java simple (classe Reg). Je bute sur un problème certainement très basic, mais je ne m'en sors pas depuis 2 jours : malgré un import de java.io* dans ma classe Reg eclipse (et aussi netbeans 6.9) que ce soit sous linux ou Win7 (et oui j'ai tout essayé avec ré-installation des jvm et tout et tout), le correcteur m'indique que ma classe FileInputStream() est introuvable ! (FileNotFoundException). A noter que je n'ai pas encore essayé de compiler quoi que ce soit vu l'erreur indiquée. Je ne comprends pas : pas d'erreur quand j'indique l'import "import java.io.*;" et la classe java.io.FileInputStream appartient bien à java.io, enfin d'après ce que j'ai pu lire dans la doc.

    merci de votre aide .... help

    voici le code source :

    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
    package events;
     
    import java.io.*;
    import java.util.Properties;
     
    public class Reg {
     
    	public Reg(){
    // create default properties
    		 Properties defaultProps = new Properties();
    	        FileInputStream in = new FileInputStream("defaultproperties");
    	        defaultProps.load(in);
    	        in.close();
     
    	        // create application properties with default
    	        Properties applicationProps = new Properties(defaultProps);
     
    	        // now load application properties
    	        in = new FileInputStream("app-properties.conf");
    	        applicationProps.load(in);
    	        in.close();
    	}
     
    }

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    La commande magique sous eclipse Ctrl+Maj+O et ça te fait tes imports tout seul.

    Si ça ne résout pas, tu as effectivement un problème avec ton jdk.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut import java.io.FileInputStream
    Merci de ta réponse rapide Pierrelm.
    J'ai bien importé java.io.* (avec le point). j'ai pointé avec "import java.io.FileInputStream;" il semble trouver la classe car si je saisi pas exemple import java.io.FileInputStreamxx; alors là il me met une erreur. Pour le JDK ce qui me semble étonnant c'est que j'ai testé sur mon PC windows 7 et j'ai le même problème avec un JDK "tout neuf". (Je suis en dev sous linux ubuntu en standard). j'ai pensé que le pb venait du fait que j'invoquait cette classe dans le constructeur mais non ça me ressort le même problème dans une fonction du style public boolean loadConf() ....

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Edit : minute, ce que j'ai raconté au départ n'est pas possible avec le code montré.

    Je suppose que le compilateur se plaint du fait que l'exception FileNotFoundException n'est pas gérée.

    Ce n'est pas qu'une classe n'est pas trouvée.
    C'est que ton bout de code risque de générer un FileNotFoundException et qu'il ne prévoit rien pour ce cas de figure, ce qui est obligatoire.

    Voir message suivant .
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    j'ai reproduit ton code... Enfait ton erreur vient de la gestion... des erreurs

    En effet, ton "FileInputStream", ainsi que ta méthode "load" and "close" sont susceptibles de retourner des erreurs du type "IOException". Il te faut donc traiter ces erreurs.

    En gros, voici ce que cela donnerai, mais je préviens avant que ce n'est pas cette méthode qu'il faut adopter !!! :

    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
     
    public Reg(){
    		try{
    			// create default properties
    			Properties defaultProps = new Properties();
    			FileInputStream in = new FileInputStream("defaultproperties");
    			defaultProps.load(in);
    			in.close();
     
    			// create application properties with default
    			Properties applicationProps = new Properties(defaultProps);
     
    			// now load application properties
    			in = new FileInputStream("app-properties.conf");
    			applicationProps.load(in);
    			in.close();
    			}
    		catch(IOException e){
    			e.printStackTrace();
    		}
    	}
    Le à pour but d'attraper les erreurs afin de leur appliquer un traitement particulier.

    Ce que je te conseil :


    1 - Faire un constructeur simple
    2 - Faire des méthodes pour traiter tes fichiers
    3 - 2crire une classe Main ou tu appeleras tes méthodes dans l'ordre voulu. Ce sera donc ta classe Main qui fera le try catch...

    Classe Main :

    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
    package events;
     
    import java.io.IOException;
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    		Reg reg = new Reg();
     
    		try {
    			//put here the code wich can generate exceptions
    			reg.setProperties();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    }
    Classe Reg :

    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
    package events;
     
    	import java.io.*;
    import java.util.Properties;
     
    	public class Reg {
     
    	public Reg(){
    		//do nothing
    	}
     
    	void setProperties() throws IOException{
    		// create default properties
    		Properties defaultProps = new Properties();
    		FileInputStream in = new FileInputStream("defaultproperties");
    		defaultProps.load(in);
    		in.close();
     
    		// create application properties with default
    		Properties applicationProps = new Properties(defaultProps);
     
    		// now load application properties
    		in = new FileInputStream("app-properties.conf");
    		applicationProps.load(in);
    		in.close();
     
    	}
     
    }
    En éspérant que cela pourra t'aider !
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Merci Telvin, merci Michon ...
    de fait les fichiers de propriétés que j'ai indiqué n'existent pas. Je ne m'en suis pas préoccupé car je suis depuis le début dans l'éditeur de code et je n'ai encore pas lancé de compilation ni lancer une quelconque exécution du programme. Serait-ce eclipse qui s'en occupe automatiquement ? un paramètre pa défault d'eclipse ?

    Michon je vais effectivement suivre ton conseil. Je connais bien les blocs try / catch. Je vais refaire mon code et tester de suite.

    En tout cas merci pour votre aide précieuse à tous les deux. je vous tiens au courant ...

  7. #7
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    J'ai oublié le terme exacte, je suis désolé, mais en effet, Eclipse analyse ton code en direct, et te préviendras de tout ce qui est erreur de syntaxe.
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par solar-one Voir le message
    Merci Telvin, merci Michon ...
    de fait les fichiers de propriétés que j'ai indiqué n'existent pas. Je ne m'en suis pas préoccupé car je suis depuis le début dans l'éditeur de code et je n'ai encore pas lancé de compilation ni lancer une quelconque exécution du programme. Serait-ce eclipse qui s'en occupe automatiquement ? un paramètre pa défault d'eclipse ?
    Non mais je me suis trompé.
    Eclipse et NetBeans lancent automatiquement la compilation de ce que tu leur donnes, oui, mais ils ne démarrent pas le programme sans que tu leur demandes .

    Ton erreur était bien une erreur de compilation (ils essaient de compiler et n'y arrivent pas.) L'erreur est que le bout de code peut lancer une FileNotFoundException, qu'il faut donc la gérer, c'est obligatoire, or ce code ne la gère pas.
    Je croyais, bêtement, que tu avais atteint une FileNotFoundException en lançant le programme. J'aurais dû essayer au lieu de supposer ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par michon Voir le message
    J'ai oublié le terme exacte, je suis désolé, mais en effet, Eclipse analyse ton code en direct, et te préviendras de tout ce qui est erreur de syntaxe.
    Ce n'est pas du parsing ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Ce que je te conseil :


    1 - Faire un constructeur simple
    2 - Faire des méthodes pour traiter tes fichiers
    3 - 2crire une classe Main ou tu appeleras tes méthodes dans l'ordre voulu. Ce sera donc ta classe Main qui fera le try catch...

    Classe Main :

    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
    package events;
     
    import java.io.IOException;
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    		Reg reg = new Reg();
     
    		try {
    			//put here the code wich can generate exceptions
    			reg.setProperties();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    }
    Classe Reg :

    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
    package events;
     
    	import java.io.*;
    import java.util.Properties;
     
    	public class Reg {
     
    	public Reg(){
    		//do nothing
    	}
     
    	void setProperties() throws IOException{
    		// create default properties
    		Properties defaultProps = new Properties();
    		FileInputStream in = new FileInputStream("defaultproperties");
    		defaultProps.load(in);
    		in.close();
     
    		// create application properties with default
    		Properties applicationProps = new Properties(defaultProps);
     
    		// now load application properties
    		in = new FileInputStream("app-properties.conf");
    		applicationProps.load(in);
    		in.close();
     
    	}
     
    }
    Michon, j'ai fait comme tu as indiqué c'est effectivement nettement plus propre. J'ai donc mon fichier Reg.java ou est codé ma classe Regn j'ai crée un fichier main.java ou j'ai mis le code que tu m'as indiqué ... Je suis sûr que j'ai du lamenyablement louper quelque chose car eclipse me signale un avertissement dnas la classe main au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void main(String[] args) {
    . Message "this methode has a constructor name" qui n'a pas l'air de lui plaire. Je pense que c'est lié à la structure certainement spécifique du main ? .. peut-être ... ?

  11. #11
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    N'aurais tu pas nommer ta classe "main" au lieu de "Main" ?

    Car en effet, si tu as mis un "m" minuscule, le nom de la méthode peu être associé à celui du contructeur... Donc ensuite c'est comme tu préfère, soit tu nommes ta classe "Main", soit tu peux la nommer autrement, par exemple "RegnMain" ou tout autre chose... seul la méthode "main()" doit impérativement s'appeler "main()" car il s'agira du point d'entrer de ton programme.

    Eclipse ne t'as pas affiché un warning lorsque tu as mis le nom de la classe en Minuscule ? (JAVA est sensible à la casse )

    Si tu la renomme, "click droit" sur le nom de la classe dans l'arborescence, "refactor" -> "rename". Ainsi, Eclipse remplacera lui même toutes les occurences.

    Sache aussi qu'en JAVA, les noms de classe commencent toujours par des majuscules, ceux des méthodes, par des minuscules....
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Et oui .... honte sur moi. J'ai fait l'impasse sur cette notions de classe Main et de function main(). Pour la casse je suis au courant. C'est encore très flou pour moi ces notions de Main/main.

    merci Michon.

  13. #13
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    En fait le nom de la classe qui contient la méthode "main()" n'a aucune importance, tu peux nommer cette classe comme tu le souhaite, en respectant quand même la majuscule sur la première lettre.

    Ta méthode "main()" peut donc en gros se situer dans n'importe quel classe. personnellement je suis adepte du fait de la placer dans une classe à part.

    Ensuite, que signifie réellement cette méthode "main()"

    Il s'agit du point d'entrée de ton programme.

    Lorsque tu vas compiler ton programme, tu devras spécifier où se situe ta méthode "main()". Chaque fois que tu exécutera ton programme, ce sera le contenu de ton main qui sera exécuté.

    J'espère être assez clair, et t'éliminer ce floue... mais en gros dis toi qu'en JAVA, le nom du fichier conditionne celui de la classe, et doit TOUJOURS commencer par une majuscule.

    Hormis les noms de classe, il me semble que tous le reste (méthodes, variables... ) commencent usuellement par des minuscules.
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Ok Michon. La méthode main est invoquée lors d'un appel à la classe via l'interpréteur Java ?

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Autre petite question .. En php je peux déclarer une méthode qui reçoit des paramètres initialisés avec des valeurs par défault.

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public saveProperties($eventsPropsFile = NULL) {
     
    if (is_null($eventsPropsFile)) $eventsPropsFile = $this->props->getProperty("eventsPropsFile"); 
     ....
    ....
    }
    avec Java je me suis débrouillé comme ça :

    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
     
    void saveProperties() {
    		String eventsPropsFile = this.props.getProperty("EventsConfFile");
    		try {
    		this.saveProperties(eventsPropsFile);
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.exit(0);
    		} 
    	} // End saveProperties()
     
    	void saveProperties(String eventsPropsFile) throws IOException{
    		FileOutputStream out = new FileOutputStream(eventsPropsFile);
    		this.props.store(out, this.props.getProperty("EventsConfFileComments"));
    		out.close();	
    	} // End saveProperties(String eventsPropsFile)
    je trouve ça super lourd ... Il y a un autre moyen ?

  16. #16
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je comprends pas... Tu fais des choses différentes dans la première et la deuxième. Celle qui appelle l'autre devrait ne rien faire d'autre qu'appeler l'autre.
    Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void saveProperties() throws IOException {
      String eventsPropsFile = props.getProperty("EventsConfFile");
      saveProperties(eventsPropsFile);
    }
    Et puis, eventsPropsFile est la seule variable. Elle pourrait avoir un nom plus court.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Le problème evoqué est que je ne sais pas comment appeller une fonction dont le paramètre aurait une valeur par défaut comme indiqué dans la partie code Php.
    Donc soit on appel la méthode saveProperties() sans argument et donc
    je charge une valeur par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String eventsPropsFile = props.getProperty("EventsConfFile");
    et j'appel ensuite la même méthode avec la deuxième signature :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saveProperties(eventsPropsFile)
    . Cela me permet de simuler ce que je ferais en php avec simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public saveProperties($eventsPropsFile = NULL) {
     if (is_null($eventsPropsFile)) $eventsPropsFile = $this->props->getProperty("eventsPropsFile");

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    C'est très lourd c'est pour ça que je me permet de poser la question. Si je déclare une méthode avec un argument et que je l'invoque sans, ça ne doit pas marcher .. ou alors j'ai vraiment loupé quelque chose, ce qui est tout à fait possible.

  19. #19
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Le premier exemple que tu nous as montré, il est très lourd, oui.

    Mais celui que moi je t'ai montré, ça va, non ? En tout cas, c'est l'usage en Java.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. importer des classes java
    Par Nickysama dans le forum Forms
    Réponses: 8
    Dernier message: 31/03/2010, 11h55
  2. Comment importer une class Java (ou bien un .jar) ?
    Par newinjava dans le forum Langage
    Réponses: 6
    Dernier message: 26/11/2009, 23h33
  3. importer une classe java dans une page jsp
    Par chafik_si3 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/03/2009, 15h51
  4. import de classe java.
    Par dolfendo dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 02/05/2008, 17h01
  5. importer une class java dans page jsp
    Par Nemesys dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 29/03/2007, 22h37

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