gpt4 book ai didi

java - 解压文件真的很慢

转载 作者:行者123 更新时间:2023-11-30 06:34:12 26 4
gpt4 key购买 nike

我编写了一些代码来检索 zip 文件并将其解压缩到目录中。 zip 文件包含两个文件夹,根据每个文件所在的文件夹,将其解压缩到该目录的文件夹中。

但是,代码的运行时间非常长(大约 10 分钟)。不过,每个文件夹包含近 1000 个文件,zip 文件的总大小为 5000kb。我认为它运行得很慢,因为每次进入循环时我都会创建 FileOutputStream 和 InputStream。但是,我需要这样做,因为在从 zip 文件中读取文件之前我不知道文件的输出目录。 (即找出它位于哪个文件夹中)

有什么建议吗?

/**
* Retrieves and unzips a file from its URL
*/
public void retrieveFiles(String URL) {

//Retrieve file from URL
File zip = new File(getFile(URL));
zip.mkdirs();

try {
//Create .zip file from file directory
ZipFile zipFile = new ZipFile(zip);
Enumeration<? extends ZipEntry> enumeration = zipFile.entries();

//While zip file contains elements, get the next zipped file
while (enumeration.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) enumeration.nextElement();

//Ignore folders and other zip files
if(!zipEntry.isDirectory() && !zipEntry.getName().endsWith(".zip")){

//Find directory and filename for new unzipped file
String directory = getURL(zipEntry.getName());
String fileName = getFileName(zipEntry.getName());
String fullDirectory = createDirectory(directory, fileName);

//Unzip file and store in directory
System.out.println("Unzipping file: " + fileName);
FileOutputStream fout = new FileOutputStream(fullDirectory);
InputStream in = zipFile.getInputStream(zipEntry);
for (int c = in.read(); c != -1; c = in.read()) {
fout.write(c);
}
zipFile.getInputStream(zipEntry).close();
in.close();
fout.close();
}
}
zipFile.close();
System.out.println("Unzipping complete!");

zip.delete();

} catch (IOException e) {
System.out.println("Unzip failed");
e.printStackTrace();
}
}

最佳答案

您一次复制一个字节

for (int c = in.read(); c != -1; c = in.read())
fout.write(c);
}

您可以尝试使用 Apache org.apache.commons.io.IOUtils.copy(),因为这会分块复制并使用 NIO 和其他改进。您可以在 commons-io.jar 中找到它

关于java - 解压文件真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com