用Java打开debian包

Posted

技术标签:

【中文标题】用Java打开debian包【英文标题】:Open debian package with Java 【发布时间】:2011-09-15 14:09:11 【问题描述】:

Java 中有没有用于解压 .deb (debian) 存档的库?不幸的是,我还没有找到任何有用的东西。谢谢。

【问题讨论】:

您的意思是打开存档以检查其内容还是实际部署存档? 用户写了“... for unpacking a .deb ...”所以他的意思可能是提取。 我想解压存档并将其部署到一个临时文件夹。因此,如果 .deb 存档包含文件/文件夹 X、Y、Z 我想将 X、Y、Z 提取到一个临时文件夹,请说“T”并能够创建一个“新文件(T,X)”。 【参考方案1】:

如果您通过解压缩来提取文件,则应该可以使用Apache Commons Compress。 .deb 文件是“implemented as an ar archive”,Commons Compress 能够解压缩 ar 档案。

【讨论】:

谢谢,我一定会尝试 Apache Commons Compress... 没有注意到“ar 存档”部分。 请注意,*** ar 存档将依次包含两个 tar 存档,但显然 ACC 也应该处理这个问题。【参考方案2】:

好的,正如我所建议的那样,我使用了 apache commons compress,这是一种可以解决问题的方法。从 maven repo 下载它:http://mvnrepository.com/artifact/org.apache.commons/commons-compress/1.2。

/**
 * Unpack a deb archive provided as an input file, to an output directory.
 * <p>
 * 
 * @param inputDeb      the input deb file.
 * @param outputDir     the output directory.
 * @throws IOException 
 * @throws ArchiveException 
 * 
 * @returns A @link List of all the unpacked files.
 * 
 */
private static List<File> unpack(final File inputDeb, final File outputDir) throws IOException, ArchiveException 

    LOG.info(String.format("Unzipping deb file %s.", deb.getAbsoluteFile()));
    LOG.info(String.format("Into dir %s.", outDir.getAbsoluteFile()));

    final List<File> unpackedFiles = new LinkedList<File>();
    final InputStream is = new FileInputStream(inputDeb); 
    final ArArchiveInputStream debInputStream = (ArArchiveInputStream) new ArchiveStreamFactory().createArchiveInputStream("ar", is);
    ArArchiveEntry entry = null; 
    while ((entry = (ArArchiveEntry)debInputStream.getNextEntry()) != null) 
        LOG.info("Read entry");
        final File outputFile = new File(outputDir, entry.getName());
        final OutputStream outputFileStream = new FileOutputStream(outputFile); 
        IOUtils.copy(debInputStream, outputFileStream);
        outputFileStream.close();
        unpackedFiles.add(outputFile);
    
    debInputStream.close(); 
    return unpackedFiles;

【讨论】:

我对上面的源代码有一个更正。请注意,“entry”变量可能代表一个目录。在这种情况下,请添加检查 if (entry.isDirectory()) 并确保创建所需的目录。

以上是关于用Java打开debian包的主要内容,如果未能解决你的问题,请参考以下文章

.deb 文件 如何打开

Java 应用程序在 Debian 上打开和播放媒体错误

debian怎么查看打开了哪些端口

使用java打开jar包失败

jar包无法用javaw.exe打开?本人使用WIN7 java环境配置正常,jar包可以用cmd java -jar 文件名.jar 打开

Debian 打开SSH服务以及SSH基本排错方法