我需要在系统中向客户提供zip文件的视图,并允许客户下载选择的文件.
现在我已经记住了所有的zipentry位置,但有没有java zip工具来解压缩zip文件的指定位置?API就像解压缩(file,long entryStart,long entryLength);
Ami*_*ati 10
您可以使用以下代码从zip中提取特定文件: -
public static void main(String[] args) throws Exception{
String fileToBeExtracted="fileName";
String zipPackage="zip_name_with_full_path";
OutputStream out = new FileOutputStream(fileToBeExtracted);
FileInputStream fileInputStream = new FileInputStream(zipPackage);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream );
ZipInputStream zin = new ZipInputStream(bufferedInputStream);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
if (ze.getName().equals(fileToBeExtracted)) {
byte[] buffer = new byte[9000];
int len;
while ((len = zin.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
break;
}
}
zin.close();
}
Run Code Online (Sandbox Code Playgroud)
另请参阅此链接:如何从远程存档文件中提取单个文件?
Thu*_*rge 10
这可以在不使用Java 7的NIO2处理字节数组或输入流的情况下完成:
public void extractFile(Path zipFile, String fileName, Path outputFile) throws IOException {
// Wrap the file system in a try-with-resources statement
// to auto-close it when finished and prevent a memory leak
try (FileSystem fileSystem = FileSystems.newFileSystem(zipFile, null)) {
Path fileToExtract = fileSystem.getPath(fileName);
Files.copy(fileToExtract, outputFile);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以这样尝试:
ZipFile zf = new ZipFile(file);
try {
InputStream in = zf.getInputStream(zf.getEntry("file.txt"));
// ... read from 'in' as normal
} finally {
zf.close();
}
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过,但是在Java 7 ZipFileSystem中,您可以像这样从zip文件中提取file.TXT文件。
Path zipfile = Paths.get("/samples/ziptest.zip");
FileSystem fs = FileSystems.newFileSystem(zipfile, env, null);
final Path root = fs.getPath("/file.TXT");
Run Code Online (Sandbox Code Playgroud)