Bonjour,

J'ai un projet qui se compile bien, et s'execute bien sous eclipse,
j'obtiens un jar dont l'arboresence est la suivante:

com
-monGroupe
-monProjet
-RunningControler.class
-logo.png
-autres fichiers...

Besoin:
Mon programme copie le fichier logo.png dans un repertoire spécifié par l'utilisateur.
Problème: lorsque j'execute directement mon jar,
j'ai une erreur de copie de fichier suivante:

file:\C:\Program%20Files\MonProjet\monProjet.jar!\com\monGroupe\monProjet\logo.png (Syntaxe du nom de fichier, de répertoire ou de volume incorrecte)

voici le code de la fonction qui copie le fichier logo:

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
	/**
         * copy a file of ressource 
         * whose name is given in parameter, in the output folder
         *
         * @param fileName : name of file to copy
         * @param outputDirPath : output folder full path
         * @return true if sucessfuly copied
         */
	public boolean copyFile(String fileName, String outputDirPath){
		boolean isSuccess = false;
		if(fileName!=null){
			 try{
				URL filePath = this.getClass().getResource(fileName); 
				//URL filePath = ClassLoader.getSystemResource("com/monGroupe/monProjet/" + fileName);
 
		        File f1 = new File(filePath.getPath());
		        File f2 = new File(outputDirPath+ File.separator+ fileName);
		        InputStream in = new FileInputStream(f1);
 
		        //For Overwrite the file.
		        OutputStream out = new FileOutputStream(f2);
 
		        byte[] buf = new byte[1024];
		        int len;
		        while ((len = in.read(buf)) > 0){
		          out.write(buf, 0, len);
		        }
		        in.close();
		        out.close();
		        isSuccess = true;
		      }
		      catch(FileNotFoundException ex){
		        logger.error(ex.getMessage() + " in " + outputDirPath);
		      }
		      catch(Exception e){
		    	logger.error(e.getMessage());
 
		      }
		}
 
		return isSuccess;
             }
 
 
//une variante de ma fonction copie, mais toujours le même problème
 
public boolean copyFile(String fileName, String outputDirPath){
boolean isSuccess = false;
		if(fileName!=null){
			URL filePath = this.getClass().getResource(fileName);
			//URL filePath = ClassLoader.getSystemResource("com/monGroupe/monProjet/" + fileName);
			// input channel
			FileChannel in = null;
			// output channel
			FileChannel out = null;
 
			try {
				// Init
				in = new FileInputStream(filePath.getPath()).getChannel();
 
				out = new FileOutputStream(outputDirPath+ File.separator
						+ fileName).getChannel();
 
				// Copie depuis le in vers le out
				in.transferTo(0, in.size(), out);
				isSuccess = true;								
 
			} 
			catch (Exception e) {
 
				logger.error( "copy of file " + filePath.getPath());
			} 
			finally { // finalement on ferme
				if (in != null) {
					try {
						in.close();
					} catch (IOException e) {
						logger.error( "copy of file " + filePath.getPath());
					}
				}
				if (out != null) {
					try {
						out.close();
					} catch (IOException e) {
						logger.error( "copy of file " + filePath.getPath());
					}
				}
			}
		}
		return isSuccess;
dans le code ci-dessus, que j'utilise la méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
URL filePath = this.getClass().getResource(fileName);
ou
URL filePath = ClassLoader.getSystemResource("com/monGroupe/monProjet/" + fileName);
j'ai toujours le même problème.
Où doit je placer mes fichiers de ressources?
et comment les copier une fois qu'ils sont dans le jar, quelle méthode utilisée?

Merci pour vos réponses