Extract some content from jar-file downloaded with JWS

后端 未结 2 520
没有蜡笔的小新
没有蜡笔的小新 2021-01-24 05:21

im trying to extract some files from a jar-file downloaded using java-webstart. below code was used to locate the jar and initiate the FileSystem

1 final Protect         


        
2条回答
  •  不要未来只要你来
    2021-01-24 06:02

    Below is an implementation of your idea Andrew, it utilizes a DirUtil package I found here: http://codingjunkie.net/java-7-copy-move/

    public class Zipper {
    
        private static final String TEMP_FILE_PREFIX = "temp-";
        private static final String TEMP_FILE_SUFIX = ".jar";
    
        private Logger logger = Logger.getLogger(getClass().getName());
    
        public Path extractProgram(String locationOfEmbeddedJar, String installDir) {
            Path installPath = null;
            try {
                installPath = Paths.get(installDir);
                if (Files.isDirectory(installPath)) {
                    logger.warn("program already installed");
                } else {
                    installPath = Files.createDirectory(installPath);
                    Path tempJar = Files.createTempFile(TEMP_FILE_PREFIX,
                            TEMP_FILE_SUFIX);
                    this.extractEmbeddedJar(locationOfEmbeddedJar, tempJar.toFile());
    
                    logger.warn("in jarfile");
                    // in jar file
                    FileSystem fs = FileSystems.newFileSystem(tempJar, null);
                    Path programPath = fs.getPath("/");
    
                    logger.warn("programPath=" + programPath + " fileSystem="
                            + programPath.getFileSystem());
    
                    DirUtils.copy(programPath, installPath);
                }
            } catch (IOException e) {
                logger.warn(e);
            }
    
            return (installPath);
    
        }
    
        private void extractEmbeddedJar(String locationOfEmbeddedJar,
                File locationOfTargetJar) {
            logger.warn("extractEmbeddedJar() " + locationOfEmbeddedJar);
            ClassLoader loader = this.getClass().getClassLoader();
    
            InputStream inputStream = loader
                    .getResourceAsStream(locationOfEmbeddedJar);
            try {
                OutputStream out = new FileOutputStream(locationOfTargetJar);
                byte buf[] = new byte[1024];
                int len;
                while ((len = inputStream.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                out.close();
                inputStream.close();
    
            } catch (IOException e) {
                logger.warn(e);
            }
        }
    }
    

提交回复
热议问题