groovy - 无效的文字/长度代码-如何解决此问题?

标签 groovy gradle

我是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)
    }
}

但没有成功。我已检查is是否可用,并且是否可用(is.available()返回914432)

[编辑]

如果我尝试以这种方式复制文件,则可以正常工作:
new File("C:\\Document.html").withInputStream {
    is -> new File("C:\\Document_Copy.html").withOutputStream {
        os -> os << is
    }
}

我确定my.dll在jar文件中-我从本地Maven存储库加载jar。任何的想法?

[ANOTHER 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。我不知道为什么会收到此错误。我检查了它,并且jar文件中存在plik.txt。我还输入了不存在的路径,例如getClass().getResources("/resources/thisdoesntexist.txt"),并收到此错误Cannot invoke method withInputStream() on null object

最佳答案

即使在Groovy中,也应始终使用getResourceAsStream读取资源文件的内容。如果资源路径(在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
}

关于groovy - 无效的文字/长度代码-如何解决此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16690502/

相关文章:

groovy - Gradle:为什么从Exec派生的任务看不到自定义项目属性?

javascript - 从 Grails Controller 获取复选框值

java - 将这个 FileOutputStream Groovy 方法转换为纯 Java?

java - 如何修剪通过使用 Java 反射获得的同一方法的变体?

java - 向 Boomi 中没有的日期字符串添加偏移量 - Java/"Groovy"脚本映射函数

android - Android Project如何具有不同的构建配置?

Spring Boot requestMappingHandlerMapping java.lang.ArrayStoreException

grails - 如何从grails Controller 触发gradle构建?

android - 错误 :(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'

android - 新的 Android Gradle 构建系统构建配置包名称与 Provider Authority 冲突