我需要在系统中向客户提供zip文件的视图,并允许客户下载选定的文件。
现在我已经记住了所有zipentry位置,但是有java zip工具来解压缩zip文件的指定位置吗??API就像解压一样(file, long entryStart, long entryL长度);
您可以这样尝试:
ZipFile zf = new ZipFile(file);
try {
InputStream in = zf.getInputStream(zf.getEntry("file.txt"));
// ... read from 'in' as normal
} finally {
zf.close();
}
我还没有试过,但在Java7ZipFileSystem中,您可以像这样尝试提取文件。从zip文件中删除TXT文件。
Path zipfile = Paths.get("/samples/ziptest.zip");
FileSystem fs = FileSystems.newFileSystem(zipfile, env, null);
final Path root = fs.getPath("/file.TXT");
您可以使用以下代码从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();
}
另请参阅此链接:如何从远程存档文件中提取单个文件?
这可以在不干扰字节数组或使用Java7的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);
}
}
问题内容: 我有一个Web程序,希望用户能够在其中导入文件,并且可以从文件中提取某些文件。我发现了两个类库: 和。据我了解,WAR文件是一个特殊的JAR文件,这是一个特殊的ZIP文件。那么使用会更好吗?如果ZIP和JAR文件几乎相同,为什么需要两个不同的库? 问题答案: 如果查看JarFile API,您会发现它是ZipFile类的子类。 jar特定的类大多只是添加jar特定的功能,例如对清单文件
我试图在ZIP文件内创建一个ZIP文件,以重新构建以前在内存中的zip结构,我在Java。 我失败了,因为我得到了一个错误的内部ZIP内创建的初始ZIP文件。文件已损坏。当试图打开它时,我得到一个“文件的意外结局”。 我得到了这个结构: -input.zip--InnerInput.zip 代码使用java Stack和Map在内存中解压。然后它创建input2.zip,内部nput.zip。 总
我有一个zip文件(在一个jar文件中),我想读取init。我知道我可以使用getResourceAsStream(…)轻松读取txt文件,避免“URI不分层”错误。但现在确定我该如何为zip文件做到这一点。 下面是我的代码,但当我将代码导出到runnable jar并运行它时,它会抛出“URI非层次错误”。
我需要从zip存档中包含的所有文件中提取特定的行(第二行)。我的尝试(显然)不起作用。我能找到的与此相关的一切都包括使用特定的字符串/变量来缩小要从存档文件中提取的内容——我不能在我的情况下使用它。 我得到的最接近的结果是从所有文件中提取所有行。 理想情况下,我希望使用类似于然后以获取每个文件的第二行。但这不适用于zipfiles。我需要创建临时文件并使用这种语法吗?或者有办法解决这个问题吗? 我
问题内容: 与此jar命令等效的Java是什么: 我想以编程方式创建此jar文件,因为我不确定命令是否位于我可以运行外部进程的系统路径上。 编辑 :我只想存档(和压缩)目录。不必遵循任何Java标准。即:标准拉链就可以了。 问题答案: // These are the files to include in the ZIP file String[] source = new String[]{“
问题内容: 我的情况是我有一个包含一些文件(txt,png,…)的zip文件,我想直接按它们的名称读取它,我已经测试了以下代码,但没有结果(NullPointerExcepion): resources 是一个包, zipfile 是一个zip文件。 问题答案: 如果您可以确定您的zip文件永远不会打包在另一个jar中,则可以使用以下方法: 要么: 否则,您的选择是: 使用ZipInputStre