Bonjour,
J'essaie actuellement de faire la gestion d'écriture et de lecture de mon fichier de parametre : param.ini qui ce trouve dans le dossier Resources de mon projet.
Voici mon arborescence.
-ProjetTest
..--> ProjetGestionIni
.......--> Application Sources
............--> src
.................-->org.projet.action
.......................--> GestionFichier.java
.......-->Resources
.............--> param.ini
.......--> Web Content
Donc lorsque ma page appel ma methode
LectureFichierProperties()
de ma classe GestionFichier , j'accède au fichier mais pas dans le bon répertoire, il va lire le fichier qu'il a au préalable copier dans le dossier Class de mon projet.
Le Code:
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 String lireFichierProperties() {
// Lire le fichier de paramètres de configuration pour déterminer l'état
String etat=""; // Valeur par defaut.
Properties properties = new Properties();
try {
InputStream entree = new FileInputStream(this.getClass().getClassLoader().getResource("Param.ini").getPath());
properties.load(entree);
etat = properties.getProperty("ETAT");
if (etat == null) {
//logger.error("Aucune valeur associée à l'état du lien vidéo");
System.out.println("Aucune valeur associée à l'état du lien vidéo");
}
entree.close();
} catch (NullPointerException e) {
System.out.println("Fichier de configuration vide: " + e.getMessage());
}
catch (IOException e) {
System.out.println("Fichier de configuration introuvable: " + e.getMessage());
}
return etat;
} |
Le fais de le lire la copie dans le dossier Class au lieu de lire l'original c'est pas très très grave puisque de toute façon il est identique au fichier original.
Le hic viens surtout au moment de l'écriture.
Il écris AUSSI dans le fichier du dossier Class , donc je me ramasse avec des versions différentes entre l'original et celle du dossier Class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public boolean ecrireFichierProperties(String etat) {
//Enregister la nouvelle valeur de l'état du lien vidéo
Properties props = new Properties();
boolean succes = false;
try {
OutputStream os = new FileOutputStream(this.getClass().getClassLoader().getResource("Param.ini").getPath());
props.setProperty("ETAT",etat);
props.store(os,"FICHIER DE CONFIGURATION");
os.close();
succes=true;
} catch (Exception ex) {
System.out.println("Fichier de configuration introuvable: " + ex.getMessage());
//logger.error("Fichier de configuration introuvable: " + ex.getMessage());
}
return succes;
} |
Je soupsonne que l'utilisation de getClassLoader() sois la raison pour laquel il va fouiller dans le dossier class , mais si je n'utilise pas getClassLoader() donc seulement
this.getClass().getResource("Param.ini").getPath()
Il ne trouve pas le fichier en question ... qui est par default placé a la même hauteur que src et public_html et classes
C'est assez embêtant comme problème , quelqu'un aurait une petite idée des causes probables ?
Merci 
P.s : J'espère encore une fois ne pas m'être trompé de section !
EDIT :
J'ai remarqué que si je test les méthodes en question a l'intérieur de ma classe ( donc sans être appelé par ma jsp) , le tout fonctionne bien et ce avec des appels plus simples.
InputStream entree = new FileInputStream("Param.ini");
1 2
|
OutputStream os = new FileOutputStream("Param.ini"); |
l'appel
1 2 3 4 5
|
public static void main(String[] args) {
lireFichierProperties();
ecrireFichierProperties("tata");
} |
Le fait que mon appel a mes methodes soient fait via une page jsp pourrais causer ce problème ? étrange non ?
Partager