Witajcie
Szukałem ale nie znalazłem na forum tematu dotyczącego kodu pakowania do .zip. Być może dla niektórych to temat zbyt banalny, ale warto pamiętać że dla niektórych to kolejne drzwi do pokonania więc na pewno się przyda.
Poniżej zamieszczam fragment klasy pakowania i rozpakowywania (.zip) i tutaj moje pytanie. Czy jest jakiś sposób aby te operację przyspieszyć? W momencie gdy program musi spakować ok 1000 malutkich pliczków rozbitych po wielu katalogach, a następnie rozpakować zajmuje mu to sporo czasu. Z góry dziękuję za odpowiedź.
Kod ZIP
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class a_ZIP
{
private List fileList;
private String OUTPUT_ZIP_FILE;
private String SOURCE_FOLDER;
public a_ZIP(String FOLDER_DO_ZIP, String FOLDER_Z_ZIP)
{
new a_ZAPIS_DO_DZIENNIKA("Uruchomiono a_ZIP", 0);
this.SOURCE_FOLDER = FOLDER_DO_ZIP;
this.OUTPUT_ZIP_FILE = FOLDER_Z_ZIP;
fileList = new ArrayList();
generateFileList(new File(SOURCE_FOLDER));
zipIt(OUTPUT_ZIP_FILE);
}
private void zipIt(String zipFile)
{
byte[] buffer = new byte[1024];
try{
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for(Object file : this.fileList){
ZipEntry ze= new ZipEntry((String) file);
zos.putNextEntry(ze);
FileInputStream in =
new FileInputStream(SOURCE_FOLDER + File.separator + file);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
}
zos.closeEntry();
//remember close it
zos.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
private void generateFileList(File node)
{
//add file only
if(node.isFile()){
fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
}
if(node.isDirectory()){
String[] subNote = node.list();
for(String filename : subNote){
generateFileList(new File(node, filename));
}
}
}
private String generateZipEntry(String file)
{
return file.substring(SOURCE_FOLDER.length()+1, file.length());
}
}
Kod UNZIP
public UNZIP(String INPUT_ZIP_FILE, String OUTPUT_FOLDER, int rozmiar)
{
unZipIt(INPUT_ZIP_FILE, OUTPUT_FOLDER, rozmiar);
}
private void unZipIt(String zipFile, String outputFolder, int rozmiar){
byte[] buffer = new byte[rozmiar + 1024];
try{
//create output directory is not exists
File folder = new File(outputFolder);
if(!folder.exists()){
folder.mkdir();
}
//get the zip file content
ZipInputStream zis =
new ZipInputStream(new FileInputStream(zipFile));
//get the zipped file list entry
ZipEntry ze = zis.getNextEntry();
while(ze!=null){
String fileName = ze.getName();
File newFile = new File(outputFolder + File.separator + fileName);
//create all non exists folders
//else you will hit FileNotFoundException for compressed folder
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
}catch(IOException ex)
{
}
}