Je veux décompresser les ressources de mon fichier jar. La structure de jar ressemble à ceci:getResourceAsStream() ne voit pas la ressource
my.jar
META-INF
resources
my.exe
my.dll
my
namespace
UnpackResourceFromThisClass.class
Je veux décompresser my.exe et my.dll à partir du fichier JAR. J'ai essayé de déballer ces fichiers en utilisant ce code:
try {
InputStream is = getClass().getResourceAsStream("/resources/my.exe")
OutputStream os = new FileOutputStream(new File(destDir))
Files.copy(is, os)
os.close()
is.close()
}
catch (NullPointerException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (SecurityException e) {
e.printStackTrace();
}
mais cela ne fonctionne pas. Des idées? Par conséquent, j'obtiens cette erreur:
java.lang.NullPointerException
at java.nio.file.Files.provider(Files.java:65)
at java.nio.file.Files.newInputStream(Files.java:106)
at java.nio.file.Files.copy(Files.java:2884)
at java_nio_file_Files$copy.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at pl.ydp.gradle.Is2k8Task.getResources(Is2k8Task.groovy:84)
at pl.ydp.gradle.Is2k8Task.build(Is2k8Task.groovy:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1047)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:877)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216)
Il s'agit d'un code groovy qui sera utilisé dans une tâche personnalisée Gradle.
je serais a) vérifier que le fichier .exe est b) vérifier la méthode 'Files.copy()', la version qui accepte un 'InputStream' nécessite que le second paramètre soit un' Path' (pourquoi cela ne provoque pas une erreur de compilation qui me dépasse) http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html – SJuan76
"pourquoi cela ne provoque pas une erreur de compilation est au-delà de moi" Groovy semble être le casting, le numéro de ligne dans la trace de la pile indique le premier argument est un chemin – mauhiz