在 Java 中提取包含 jar 文件的 zip 文件
Extracting a zip file containing a jar file in Java
我想提取一个包含 jar 文件的 zip 文件。该文件具有复杂的文件夹结构,其中一个文件夹中有一个 jar 文件。当我尝试使用以下代码提取 jar 文件时,程序在读取 jar 文件时进入无限循环并且永远不会恢复。它继续写入 jar 的内容,直到我们达到光盘的限制 space,即使 jar 只有几 Mbs。
请在下面找到代码片段
`
// using a ZipInputStream to get the zipIn by passing the zipFile as FileInputStream
ZipEntry entry = zipIn.getNextEntry();
String fileName= entry.getName()
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileName));
byte[] bytesIn = new byte[(int)bufferSize];
while (zipIn.read(bytesIn) > 0) // This is the part where the loop does not end
{
bos.write(bytesIn);
}
..
// flushing an closing the bos
请告诉我是否有任何方法可以避免这种情况并将 jar 文件导出到所需位置。
这符合您的需求吗?
public static void main(String[] args) {
try {
copyJarFromZip("G:\Dateien\Desktop\Desktop.zip",
"G:\Dateien\Desktop\someJar.jar");
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void copyJarFromZip(final String zipPath, final String targetPath) throws IOException {
try (ZipFile zipFile = new ZipFile(zipPath)) {
for (final Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements();) {
ZipEntry zipEntry = e.nextElement();
if (zipEntry.getName().endsWith(".jar")) {
Files.copy(zipFile.getInputStream(zipEntry), Paths.get(targetPath),
StandardCopyOption.REPLACE_EXISTING);
}
}
}
}
我想提取一个包含 jar 文件的 zip 文件。该文件具有复杂的文件夹结构,其中一个文件夹中有一个 jar 文件。当我尝试使用以下代码提取 jar 文件时,程序在读取 jar 文件时进入无限循环并且永远不会恢复。它继续写入 jar 的内容,直到我们达到光盘的限制 space,即使 jar 只有几 Mbs。
请在下面找到代码片段
`
// using a ZipInputStream to get the zipIn by passing the zipFile as FileInputStream
ZipEntry entry = zipIn.getNextEntry();
String fileName= entry.getName()
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileName));
byte[] bytesIn = new byte[(int)bufferSize];
while (zipIn.read(bytesIn) > 0) // This is the part where the loop does not end
{
bos.write(bytesIn);
}
..
// flushing an closing the bos
请告诉我是否有任何方法可以避免这种情况并将 jar 文件导出到所需位置。
这符合您的需求吗?
public static void main(String[] args) {
try {
copyJarFromZip("G:\Dateien\Desktop\Desktop.zip",
"G:\Dateien\Desktop\someJar.jar");
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void copyJarFromZip(final String zipPath, final String targetPath) throws IOException {
try (ZipFile zipFile = new ZipFile(zipPath)) {
for (final Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements();) {
ZipEntry zipEntry = e.nextElement();
if (zipEntry.getName().endsWith(".jar")) {
Files.copy(zipFile.getInputStream(zipEntry), Paths.get(targetPath),
StandardCopyOption.REPLACE_EXISTING);
}
}
}
}