2

我有一个目录(带有子目录)模板,它作为资源保存在 jar 文件中。在运行时,我需要将它(模板)提取到 tmp 目录更改一些内容,最后将其作为压缩工件发布。

我的问题是:如何轻松提取此内容?我正在尝试 getResource() 以及 getResourceAsStream() ..

4

1 回答 1

1

以下代码在这里工作正常:(Java7)

String s = this.getClass().getResource("").getPath();
if (s.contains("jar!")) {
    // we have a jar file
    // format: file:/location...jar!...path-in-the-jar
    // we only want to have location :)
    int excl = s.lastIndexOf("!");
    s = s.substring(0, excl);
    s = s.substring("file:/".length());
    Path workingDirPath = workingDir = Files.createTempDirectory("demo")
    try (JarFile jf = new JarFile(s);){
        Enumeration<JarEntry> entries = jf.entries();
        while (entries.hasMoreElements()) {
            JarEntry je = entries.nextElement();
            String name = je.getName();
            if (je.isDirectory()) {
                // directory found
                Path dir = workingDirPath.resolve(name);
                Files.createDirectory(dir);
            } else {
                Path file = workingDirPath.resolve(name);
                try (InputStream is = jf.getInputStream(je);) {
                    Files.copy(is, file, StandardCopyOption.REPLACE_EXISTING);
                }
            }
        }
    }
} else {
    // debug mode: no jar
}
于 2013-11-08T14:39:15.140 回答