ZipEntry 到文件
ZipEntry to File
是否有直接的方法将 java.util.zip.ZipEntry
解压缩为 File
?
我想指定一个位置(如 "C:\temp\myfile.java")并将条目解压到该位置。
网上有一些带有流的代码,但我更喜欢经过测试的库函数。
使用ZipInputStream
通过使用getNextEntry()
方法迭代移动到所需的ZipEntry
。然后使用 ZipInputStream.read(...)
方法读取当前 ZipEntry
的字节。将这些字节输出到 FileOutputStream
指向您选择的文件。
使用 ZipFile class
ZipFile zf = new ZipFile("zipfile");
获取条目
ZipEntry e = zf.getEntry("name");
获取输入流
InputStream is = zf.getInputStream(e);
节省字节数
Files.copy(is, Paths.get("C:\temp\myfile.java"));
使用下面的代码将“zip 文件”解压到文件中,然后使用 ZipEntry
添加到列表中。希望这对您有所帮助。
private List<File> unzip(Resource resource) {
List<File> files = new ArrayList<>();
try {
ZipInputStream zin = new ZipInputStream(resource.getInputStream());
ZipEntry entry = null;
while((entry = zin.getNextEntry()) != null) {
File file = new File(entry.getName());
FileOutputStream os = new FileOutputStream(file);
for (int c = zin.read(); c != -1; c = zin.read()) {
os.write(c);
}
os.close();
files.add(file);
}
} catch (IOException e) {
log.error("Error while extract the zip: "+e);
}
return files;
}
是否有直接的方法将 java.util.zip.ZipEntry
解压缩为 File
?
我想指定一个位置(如 "C:\temp\myfile.java")并将条目解压到该位置。
网上有一些带有流的代码,但我更喜欢经过测试的库函数。
使用ZipInputStream
通过使用getNextEntry()
方法迭代移动到所需的ZipEntry
。然后使用 ZipInputStream.read(...)
方法读取当前 ZipEntry
的字节。将这些字节输出到 FileOutputStream
指向您选择的文件。
使用 ZipFile class
ZipFile zf = new ZipFile("zipfile");
获取条目
ZipEntry e = zf.getEntry("name");
获取输入流
InputStream is = zf.getInputStream(e);
节省字节数
Files.copy(is, Paths.get("C:\temp\myfile.java"));
使用下面的代码将“zip 文件”解压到文件中,然后使用 ZipEntry
添加到列表中。希望这对您有所帮助。
private List<File> unzip(Resource resource) {
List<File> files = new ArrayList<>();
try {
ZipInputStream zin = new ZipInputStream(resource.getInputStream());
ZipEntry entry = null;
while((entry = zin.getNextEntry()) != null) {
File file = new File(entry.getName());
FileOutputStream os = new FileOutputStream(file);
for (int c = zin.read(); c != -1; c = zin.read()) {
os.write(c);
}
os.close();
files.add(file);
}
} catch (IOException e) {
log.error("Error while extract the zip: "+e);
}
return files;
}