2013-05-22 2 views
0

Я совершенно новый в groovy, и я хочу распаковать ресурсы из файла jar. Я попробовал его таким образом, как tim_yates писал здесь https://stackoverflow.com/a/16645378/2069368:Недопустимый литеральный/длинный код - как это решить?

getClass().getResource('/resources/my.dll').withInputStream { 
    is -> new File("my.dll").withOutputStream { 
     os -> os << is 
    } 
} 

, но я получаю сообщение об ошибке:

Caused by: java.util.zip.ZipException: invalid literal/length code 
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) 
    at java.io.FilterInputStream.read(FilterInputStream.java:133) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.leftShift(DefaultGroovyMethods.java:9643) 
    at org.codehaus.groovy.runtime.dgm$458.invoke(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271) 
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 

Я также попытался это:

getClass().getResource('/resources/my.dll').withInputStream { 
    is -> new File("my.dll").withOutputStream { 
     os -> Files.copy(is, os) 
    } 
} 

, но без успеха. Я checket если is доступен и он (is.available() возвращает 914432)

[EDIT]

Если я буду пытаться скопировать файл, таким образом, он работает:

new File("C:\\Document.html").withInputStream { 
    is -> new File("C:\\Document_Copy.html").withOutputStream { 
     os -> os << is 
    } 
} 

I Я уверен, что my.dll находится в файле jar - я загружаю jar из локального репозитория maven. Есть идеи?

[ДРУГОЙ EDIT]

Я добавил новый файл plik.txt в директорию ресурсов. После запуска приложения я получаю ошибку JAR entry resources/plik.txt not found in C:\Users\uer\.m2\repository\pl\gradle\is2k8\0.9\is2k8-0.9.jar. Я не знаю, почему я получаю эту ошибку. Я проверил его и plik.txt существует в файле jar. Я также ввел не существующий путь, например getClass().getResources("/resources/thisdoesntexist.txt"), и я получаю эту ошибку Cannot invoke method withInputStream() on null object.

ответ

0

Вы должны всегда использовать getResourceAsStream, чтобы прочитать содержимое файла ресурсов, даже в Groovy. Если путь ресурса (внутри Jar) является resources/my.dll и Jar находится на пути класса, это должно работать:

def stream = getClass().classLoader.getResourceAsStream("resources/my.dll") 
def file = new File("my.dll") 
file.delete() 
stream.withStream { 
    file << stream 
} 
+0

Спасибо! Оно работает! – pepuch

Смежные вопросы