本文主要是介绍Java zip解压时候 malformed input off : 0, length : 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
public static void unzip(String zipFilePath, String destDirectory) {File dir = new File(destDirectory);// 如果目标文件夹不存在,则创建if (!dir.exists()) {dir.mkdirs();}byte[] buffer = new byte[1024];try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) {ZipEntry zipEntry = zis.getNextEntry();while (zipEntry != null) {File newFile = newFile(dir, zipEntry);if (zipEntry.isDirectory()) {// 创建目录newFile.mkdirs();} else {// 创建父目录newFile.getParentFile().mkdirs();// 写入文件try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {int len;while ((len = zis.read(buffer)) > 0) {bos.write(buffer, 0, len);}}}zipEntry = zis.getNextEntry();}zis.closeEntry();} catch (IOException e) {e.printStackTrace();}}
// 保护文件路径,防止ZipPathTraversal攻击private static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {File destFile = new File(destinationDir, zipEntry.getName());String destDirPath = destinationDir.getCanonicalPath();String destFilePath = destFile.getCanonicalPath();if (!destFilePath.startsWith(destDirPath + File.separator)) {throw new IOException("Entry is outside of the target directory: " + zipEntry.getName());}return destFile;}
上述代码报错,原因是编码问题,需要
这篇关于Java zip解压时候 malformed input off : 0, length : 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!