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:
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
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;
j'ai toujours le même problème.
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);
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
Partager