Fichier properties

luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 - 13 mars 2008 à 10:33
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 - 14 mars 2008 à 15:56
Bonjour,

J'aimerai lire un fichier .properties avec la classe ResourceBundle, ce que j'ai déja fait pour des fichier situé dans le répertoire bin du projet, mais mon probleme est que ce fichier se trouve dans un repertoire specifique du disque dur, qui plus est, relatif à la variable d'environnement TEMP.

Mais a chaque essai, il me marque l'erreur suivante :

Can't find bundle for base name fichier_new.properties, locale fr_FR

Faut t'il déclarer des choses dans le clasPath en plus ou es une erreur de ma part de vouloir lire un fichier properties dans un repertoire du disque local?

Voici mon appel du properties :

rbProducts = ResourceBundle.getBundle(p.getProperty("TEMP")+"\\fichier_new.properties");

Merci d'avance pour vos réponses ...

11 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
13 mars 2008 à 10:47
Salut:

Commences tout d'abord par connaître qu'est que ça donne l'expression:

p.getProperty("TEMP")  + "\\fichier_new.properties"

en affichant sa valeur en guise de test.
0
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 1
13 mars 2008 à 10:52
Je l'ai deja fait et celle ci retourne un lien correct, c'est meme bizarre.

Voici l'erreur complete ->

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name
C:\DOCUME~1\benjamin\LOCALS~1\Temp\fichier_new.properties, locale fr_FR
    at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
    at java.util.ResourceBundle.getBundleImpl(Unknown Source)
    at java.util.ResourceBundle.getBundle(Unknown Source)
    at froggyGourmet.Boutique.(Boutique.java:150)
    at froggyGourmet.Froggy.main(Froggy.java:15)

J'ai meme essayé en retirant .properties au nom du fichier mais toujours la meme erreur.
0
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 1
13 mars 2008 à 11:16
Est-il possible au moins de mettre le chemin complet du fichier dans le ResourcesBundle ?
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
13 mars 2008 à 13:47
Salut:

As tu essayé de charger un fichier properties mais cette fois en mettant se fichier à proximité de la classe qui fait appel à la classe ResourceBundle.

Je pense que le problème est dû au ClassLoader.

Essayes de faire la manipulation et dis nous qu'est ce que ça donne?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
13 mars 2008 à 15:20
Renommes tes fichiers de properties comme ça :

fichier_new_fr.properties pour le fichier de properties en locale FR
fichier_new_es.properties pour le fichier de properties en locale ES

etc...

Dans le système de fichier, les noms des fichiers properties sont postfixés par _XX, avec XX code de locale.
Par contre dans ton code, le fichier reste sous la dénommination 'fichier_new', sans extension :

ResourceBundle.getBundle("fichier_new");
0
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 1
13 mars 2008 à 17:02
Je ne peux pas mettre le properties non loin du fichier class car l'application sera sur un cd et le properties dont je veux lire le contenu sera a la base crypté sur le cd puis decrypter par l'application sur le disque dur. Ensuite viens la lecture de ce properties depuis le disque dur.

J'ai par contre d'autre properties que je lis se situant dans le dossier bin du projet et pour cela ca marche...

Pour ce qui est du renommage des properties, j'ai fait le test de renommé mon properties en fichier_new_fr.properties et dans l'API j'appele :
ResourceBundle.getBundle("fichier_new");
mais toujours la meme erreur. 
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
13 mars 2008 à 17:49
Petite correction :
ResourceBundle.getBundle("fichier_new", "fr");
mais ton repertoire classes peut aussi contenir un fichier properties sans code de locale, ce sera celui utilisé par défaut avec :
ResourceBundle.getBundle("fichier_new");

Sinon :
http://wiki.apache.org/tomcat/Tomcat/Howto : paragraphe "How do I load a properties file?"
la méthode que tu devra utiliser est probablement avec getResourceAsStream()
0
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 1
13 mars 2008 à 18:18
Dsl et encore merci de votre aide mais je vais mettre ce probleme de coté car un de plus grande ampleur viens de me tomber dessus.
Le cryptage de mon fichier est comme suivant :
Je lis ligne par ligne mon fichier et je crypte ligne par ligne avec l'algorythme des.

Le probleme est que lorsque je decrypte, si ma ligne est un peu trop longue il me plante un erreur.

Voici la methode de cryptage et de décryptage :

 import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
 import javax.crypto.SecretKey;
 import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 import java.security.*;
 import java.util.*;
 import javax.crypto.*;

import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.KeySpec;

import javax.crypto.KeyGenerator;
 
 public class table {
 
     
 
     // 8-byte Salt
     static byte[] salt = {
         (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,
         (byte)0x56, (byte)0x35, (byte)0xE3, (byte)0x03
     };
 
     // Iteration count
     static int iterationCount = 19;
     static Cipher ecipher = null;
     static Cipher dcipher = null;
     static BufferedReader lecteurAvecBuffer = null;
     static String ligne;
     static byte[] retourL = "\n".getBytes();
     
     public static void main(String[] args) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
      {
        
         try {
                // Create encrypter/decrypter class
                desEncrypter("My Pass Phrase!");
            
                // Encrypt
                lecteurAvecBuffer = new BufferedReader(new FileReader("C:\\workspace\\apiFroggy\\bin\\test\\test.properties"));
                                 
                while ((ligne = lecteurAvecBuffer.readLine()) != null){
                    
                    System.out.println("ligne -> "+ligne);
                    String encrypted = encrypt(ligne);
                    byte[] buffer = encrypted.getBytes();
                    System.out.println("byte -> "+buffer);
                    
                    FileOutputStream envfos = new FileOutputStream("C:\\workspace\\apiFroggy\\bin\\fichier_crypt.txt",true);
                    envfos.write(buffer);
                    envfos.write(retourL);
                    envfos.close();                    
                }
                
                lecteurAvecBuffer = new BufferedReader(new FileReader("C:\\workspace\\apiFroggy\\bin\\fichier_crypt.txt"));
                 
                while ((ligne = lecteurAvecBuffer.readLine()) != null){
                    
                    String decrypted = decrypt(ligne);
                    byte[] buffer = decrypted.getBytes(); 
                    
                    FileOutputStream envfos = new FileOutputStream("C:\\workspace\\apiFroggy\\bin\\fichier_new.txt",true);
                    envfos.write(buffer);
                    envfos.write(retourL);                    
                    envfos.close();                    
                }
            
                
            } catch (Exception e){
            }
      }
        
       
     
     
     
 
     public static void desEncrypter(String passPhrase) {
         try {
             // Create the key
             KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
             SecretKey key = SecretKeyFactory.getInstance(
                 "PBEWithMD5AndDES").generateSecret(keySpec);
             ecipher = Cipher.getInstance(key.getAlgorithm());
             dcipher = Cipher.getInstance(key.getAlgorithm());
 
             // Prepare the parameter to the ciphers
             AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
 
             // Create the ciphers
             ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
             dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
         } catch (java.security.InvalidAlgorithmParameterException e) {
         } catch (java.security.spec.InvalidKeySpecException e) {
         } catch (javax.crypto.NoSuchPaddingException e) {
         } catch (java.security.NoSuchAlgorithmException e) {
         } catch (java.security.InvalidKeyException e) {
         }
     }
 
     public static String encrypt(String str) {
         try {
             // Encode the string into bytes using utf-8
             byte[] utf8 = str.getBytes("UTF8");
 
             // Encrypt
             byte[] enc = ecipher.doFinal(utf8);
 
             // Encode bytes to base64 to get a string
             return new sun.misc.BASE64Encoder().encode(enc);
         } catch (javax.crypto.BadPaddingException e) {
         } catch (IllegalBlockSizeException e) {
         } catch (UnsupportedEncodingException e) {
         } catch (java.io.IOException e) {
         }
         return null;
     }
 
     public static String decrypt(String str) {
         try {
             // Decode base64 to get bytes
             byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
 
             // Decrypt
             byte[] utf8 = dcipher.doFinal(dec);
 
             // Decode using utf-8
             return new String(utf8, "UTF8");
         } catch (javax.crypto.BadPaddingException e) {
         } catch (IllegalBlockSizeException e) {
         } catch (UnsupportedEncodingException e) {
         } catch (java.io.IOException e) {
         }
         return null;
     }
 }
0
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 1
14 mars 2008 à 11:22
Je viens de repérer ou viens mon probleme dans le cryptage :

Lors du cryptage de la longue ligne, il me place deux caractère ascii de valeur 10 et 13 se qui représente les caractère \r et \n .
Donc lorsque le ligne est ecrite dans le fichier, il me renvoi a ligne une partie de la la ligne crypté ce qui me plante mon décryptage a ce niveau.

Avez vous des idée sur ce probleme?
Es un probleme par rapport a la ligne "return new sun.misc.BASE64Encoder().encode(enc);" dans la fonction encrypt?
Doit je revoir ma méthode de cryptage????

Merci par avance de votre aide...
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
14 mars 2008 à 15:14
Pas tout suivi, surtout qu'il y a des trucs qui me chiffonent.

Tu vas livrer un CD contenant un fichier crypté et un programme qui le décrypte tout seul. Je suppose que par la suite la clé sera demandé a l'utilisateur de l'application. Sinon autant livrer un CD avec un fichier non crypté, ça ira plus vite (pour la personne bien intentionnée qui n'aura pas a attendre le décryptage, et pour la personne mal intentionnée qui aura déjà tout).

Les bloc try-catch sont vides, il n'y a même pas d'affichage d'erreur ou de printStackTrace. Tu délègues la gestion d'erreur à la jvm. Si toi tu ne sais pas quelle est la source de l'erreur, comment nous on peut le savoir.

public static void main(String[] args) throws IOException,
NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException

En gros, à la moindre exception, ton programme plante.
0
luckybenji86 Messages postés 42 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 16 mai 2008 1
14 mars 2008 à 15:56
Oui c'est vrai que je ne récupère pas les erreur mais ce matin j'ai trouvé où planté mon api. Lorsque la methode de cryptage doit crypter une ligne un peu trop longue, elle génére les caratère ascii 10 et 13 qu'il place dans le tableau de byte. Probleme résolu puisque j'ai écrit un bout de code retirant ces caratère du tableau et cela marche mais je pense que je vais abandonner ce systeme de cryptage car lorsque l'application se lance , elle décrypte le fichier mais comme celui ci sera au final un peu lourd, le décryptage mets un temps fou.(trop long pour l'utilisateur)

Je repart de zero comme mon moral.

Merci quand meme pour votre aide ...
0
Rejoignez-nous