Cra*_*aig 2 java performance zip
我编写了一些代码,用于检索zip文件并将其解压缩到directoy中.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();
}
}
Run Code Online (Sandbox Code Playgroud)
您正在一次复制一个字节的文件
for (int c = in.read(); c != -1; c = in.read())
fout.write(c);
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用Apaches org.apache.commons.io.IOUtils.copy(),因为这将以块的形式复制并使用NIO和其他改进.你可以在commons-io.jar中找到它
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |