用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包的主要内容,如果未能解决你的问题,请参考以下文章
jar包无法用javaw.exe打开?本人使用WIN7 java环境配置正常,jar包可以用cmd java -jar 文件名.jar 打开