Как найти конкретный каталог из файла jar / zip в java? - PullRequest
0 голосов
/ 09 февраля 2012

Я работал над этим довольно много часов. Я не могу найти проблему с этой проблемой. По сути, у меня есть это:

У меня есть банка, назовем его "a.jar"

Мне нужно получить каталог "z" и его содержимое из "a.jar", но "z" нет в корневом каталоге "a.jar".

"z" в "/ x / y /" и "/ x / y /" в "a.jar", поэтому это выглядит так:

"a.jar / х / у / г /"

Надеюсь, это достойное объяснение. Кстати, «a.jar» - это то, из чего все кончается, поэтому он явно находится в пути к классам.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

В основном для каждого ZipEntry вы должны проверить, является ли он директорией (), и также проанализировать его.Проверьте эту ссылку: http://www.javaworld.com/javaworld/javatips/jw-javatip49.html

LE:

Вот полный пример, который извлекает файлы из банки, и если вы укажете конкретный путь, он извлечет только эту папку:

public void doUnzip(String inputZip, String destinationDirectory, String specificPath)
        throws IOException {
    int BUFFER = 2048;
    File sourceZipFile = new File(inputZip);
    File unzipDestinationDirectory = new File(destinationDirectory);
    unzipDestinationDirectory.mkdir();

    ZipFile zipFile;
    // Open Zip file for reading
    zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ);

    // Create an enumeration of the entries in the zip file
    Enumeration<?> zipFileEntries = zipFile.entries();

    // Process each entry
    while (zipFileEntries.hasMoreElements()) {
        // grab a zip file entry
        ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();

        if(specificPath != null){
            if(entry.getName().startsWith(specificPath) == false)
                continue;
        }

        File destFile = new File(unzipDestinationDirectory, entry.getName());

        // create the parent directory structure if needed
        destFile.getParentFile().mkdirs();

        try {
            // extract file if not a directory
            if (!entry.isDirectory()) {
                BufferedInputStream is = new BufferedInputStream(
                        zipFile.getInputStream(entry));
                // establish buffer for writing file
                byte data[] = new byte[BUFFER];

                // write the current file to disk
                FileOutputStream fos = new FileOutputStream(destFile);
                BufferedOutputStream dest = new BufferedOutputStream(fos,
                        BUFFER);

                // read and write until last byte is encountered
                for (int bytesRead; (bytesRead = is.read(data, 0, BUFFER)) != -1;) {
                    dest.write(data, 0, bytesRead);
                }
                dest.flush();
                dest.close();
                is.close();
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
    zipFile.close();
}

public static void main(String[] args) {
    Unzip unzip = new Unzip();
    try {
        unzip.doUnzip("test.jar", "output", "x/y/z");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
1 голос
/ 09 февраля 2012

.. (ZipEntry), но они не очень хорошо работают с подкаталогами.

Они работают просто отлично.Повторяйте записи и просто проверяйте, что путь соответствует этому подкаталогу.Если это так, добавьте его в список (или обработайте, как угодно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...