Bonjour,

J'ai un fichier CreationTable_SuiviCumul.sql qui se trouve dans mon projet "TraitementReferentielFlux" dans le répertoire : "requetesSQL" :


Nom : 2021-03-25-CheminFichier-01.png
Affichages : 1176
Taille : 79,2 Ko

J'ai crée l'opération suivante qui permet de tenir compte de la forme des chemins de fichiers selon l'environnement dans lequel le programme est executé :

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
 
   public String gestionCheminFichier(String e_cheminRelatif, String e_nomFichier) {
 
        // Déclaration des variables locales
        String s_nomLongLocalFichier = null;
        String l_cheminJREJava = null;
        String l_separateurDeFichier = null;
 
        String[] l_tableauRepertoiresUnitaires = null;
 
        ClassLoader l_classloader = null;
        URL l_url = null;
 
        l_cheminJREJava = System.getProperty("java.home");
 
        System.out.println("Le chemin de la JRE java est : " + l_cheminJREJava);
 
        l_separateurDeFichier = System.getProperty("file.separator");
 
        l_tableauRepertoiresUnitaires = l_cheminJREJava.split(Pattern.quote(l_separateurDeFichier));
 
        // Pour éviter des problèmes de différence d'arborescence entre l'excution sous Eclipse
        // et l'execution via un script dos ou shell, il faut utiliser les 2 lignes d'instructions suivantes
        l_classloader = Thread.currentThread().getContextClassLoader();
 
        l_url = l_classloader.getResource(e_cheminRelatif + e_nomFichier);
 
        System.out.println("L'URL est : " + l_url);
 
        // Dans Eclipse le chemin de la JRE est :
        // C:\Program Files\Eclipse_DEV\Jdks\jdk1.8\jre
        // Sous DOS le chemin est : C:\Program Files (x86)\Java\jre1.8.0_91
        // On recupère le 3éme membre du tableau pour voir s'il est égale à Eclipse_DEV (environnement Eclipse)
        // ou non (environnement DOS)
        if ("Eclipse_DEV".equals(l_tableauRepertoiresUnitaires[2])) {
 
            // Le getFile() de URL imprime en premier caractère un slash (/) que nous ne souhaitons pas d'ou le substring
            s_nomLongLocalFichier = l_url.getFile().substring(1);
 
        } else {
 
            // Le getFile() de URL imprime en premier caractère un slash (/) que nous ne souhaitons pas d'ou le substring
            // Exemple : /file:/C:/User/E524761/eclipse/workspace/TraitementReferentielFlux/bin/requetesSQL/CreationTable_SuiviEntreeCumul.sql
            // Il faut supprimer la chaine de caractère suivante : /file:/
            s_nomLongLocalFichier = l_url.getFile().substring(6);
        }
 
        System.out.println("Le nom long du fichier est : " + s_nomLongLocalFichier);
 
        return s_nomLongLocalFichier;
    }

Quand je l'execute sous Eclipse, je n'ai pas de problème. Le fichier CreationTable_SuiviCumul.sql est bien trouvé et pris en compte.

Par contre lorsque j'execute le programme sous DOS, j'ai l'erreur suivante :

...
Caused by: java.io.FileNotFoundException: C:\TEMP\referentiel\bin\TraitementReferentielFlux.jar!\requetesSQL\CreationTable_SuiviCumul.sql (Le chemin d?accès spécifié est introuvable)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
...
Est ce que quelqu'un aurait une idée.

Par avance merci.

Bien à vous.