Показать сообщение отдельно
Старый 19.01.2012, 16:06   #4
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: где взять библиотеки для архивирования?

сегодня снова использовал класс для распаковки и решил расставить комментарии и выложить код в теме. есть подозрения, что он кому-то может пригодиться. может, это всё и просто, и очевидно, как многим кажется, но лично я - тормоз, помнится, въехал только с третьей попытки. надеюсь комментарии помогут кому-нибудь разобраться в принципах использования утилиты zip:
...
import java.io.*;
import java.util.zip.*;

public class  
Unzip {

    
// filename - имя файла архива
    // unzipPath - путь к папке, в которую будет распакованы файлы и папки из архива filename
    // метод поддерживает структуру папок при распаковке
    // (вхождение в архив - запакованные в архив файл или папка)
    
public static void unzip(String filenameString unzipPath) {
        try {
            
// буфер для чтения из архива
            
byte[] buf = new byte[1024];
            
// поток архива
            
ZipInputStream zipinputstream null;
            
// вхождения в архив
            
ZipEntry zipentry;
            
// создаем поток архива, параметр - свежесозданный поток файла архива
            
zipinputstream = new ZipInputStream(
                new 
FileInputStream(filename));
            
// получаем очередное вхождение в архив
            
zipentry zipinputstream.getNextEntry();
            
// перебираем все вхождения в архив
            // пока все вхождения в архив не кончатся
            
while (zipentry != null) { 
                
// получаем имя вхождения (запакованного файла или папки)
                
String entryName zipentry.getName();
                
// для отладки
                
System.out.println("entryname " entryName);
                
// количество фактически прочитанных байтов
                
int n;
                
// создаем поток для чтения распакованного файла/папки
                
FileOutputStream fileoutputstream;
                
// создаем собственно файл
                
File newFile = new File(entryName);
                
// если очередное вхождение - папка, то пропускаем текущую итерацию цикла
                
String directory newFile.getParent();
                if(
directory == null) {
                    if(
newFile.isDirectory())
                        break;
                }
                
// если вхождение - файл, то создаем выходной поток для записи распакованного файла
                // с учетом указанного пути для распаковки
                
fileoutputstream = new FileOutputStream(unzipPath entryName);
                
// переписываем весь файл из архива в созданный поток
                
while ((zipinputstream.read(buf01024)) > -1)
                    
fileoutputstream.write(buf0n);
                
// закрываем поток
                
fileoutputstream.close();
                
// закрываем вхождение
                
zipinputstream.closeEntry();
                
// получаем следующее вхождение
                
zipentry zipinputstream.getNextEntry();
            }
            
// закрываем поток архива
            
zipinputstream.close();
        } catch (
Exception e) {
            
e.printStackTrace();
        }
    }

__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием