распакуйте .gz файл в пакете

Измененный код Desolator выше, чтобы передать управление в качестве параметра ... многоразового использования

    private void MoveUp()
    {
        MoveItem(-1,listBox1);
    }      


    private void MoveDown()
    {
        MoveItem(1,listBox1);
    }

    public void MoveItem(int direction,ListBox listBox)
    {
        // Checking selected item
        if (listBox.SelectedItem == null || listBox.SelectedIndex < 0)
            return; // No selected item - nothing to do

        // Calculate new index using move direction
        int newIndex = listBox.SelectedIndex + direction;

        // Checking bounds of the range
        if (newIndex < 0 || newIndex >= listBox.Items.Count)
            return; // Index out of range - nothing to do

        object selected = listBox.SelectedItem;

        // Removing removable element
        listBox.Items.Remove(selected);
        // Insert it in new position
        listBox.Items.Insert(newIndex, selected);
        // Restore selection
        listBox.SetSelected(newIndex, true);
    }
6
задан Kapil D 23 May 2009 в 06:21
поделиться

6 ответов

a) Zip - это формат архива, а gzip - нет. Таким образом, итератор ввода не имеет особого смысла, если (например) ваши gz-файлы не являются сжатыми tar-файлами. Вероятно, вы хотите:

File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));

б) Вы хотите только распаковать файлы? В противном случае вы можете использовать GZIPInputStream и читать файлы напрямую, то есть без промежуточной декомпрессии.

Но хорошо. Допустим, вы действительно только хотите распаковать файлы. Если это так, вы, вероятно, могли бы использовать это:

public static File unGzip(File infile, boolean deleteGzipfileOnSuccess) throws IOException {
    GZIPInputStream gin = new GZIPInputStream(new FileInputStream(infile));
    FileOutputStream fos = null;
    try {
        File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));
        fos = new FileOutputStream(outFile);
        byte[] buf = new byte[100000];
        int len;
        while ((len = gin.read(buf)) > 0) {
            fos.write(buf, 0, len);
        }

        fos.close();
        if (deleteGzipfileOnSuccess) {
            infile.delete();
        }
        return outFile; 
    } finally {
        if (gin != null) {
            gin.close();    
        }
        if (fos != null) {
            fos.close();    
        }
    }       
}
10
ответ дан 9 December 2019 в 20:48
поделиться

Если у вас есть фиксированное количество файлов для однократной распаковки, почему бы вам не использовать для этого существующие инструменты? Как заметил Пол Мори, gunzip может это сделать: для i в * .gz; сделать gunzip $ i; сделано И он автоматически назовет их, удалив .gz $

В Windows попробуйте winrar, возможно, или gunzip из http://unxutils.sf.net

0
ответ дан 9 December 2019 в 20:48
поделиться

Что касается A, команда gunzip создает несжатый файл с исходным именем без суффикса .gz . См. страницу руководства .

Что касается B, нужен ли вам специально gunzip, или подойдет другой алгоритм сжатия? Существует java-порт алгоритма сжатия LZMA, используемый 7zip для создания файлов .7z , но он не обрабатывает файлы .gz .

2
ответ дан 9 December 2019 в 20:48
поделиться

GZip обычно используется только для отдельных файлов, поэтому обычно не содержит информации об отдельных файлах. Чтобы объединить несколько файлов в один сжатый архив, они сначала объединяются в несжатый файл Tar (с информацией об отдельном содержимом), а затем сжимаются в один файл. Эта комбинация называется Tarball.

Существуют библиотеки для извлечения информации об отдельных файлах из Tar, как и в случае с ZipEntries. Один пример. Сначала вам нужно будет извлечь файл .gz во временный файл, чтобы использовать его, или, по крайней мере, передать GZipInputStream в библиотеку Tar.

Вы также можете вызвать 7-Zip из командной строки, используя Java. Синтаксис командной строки 7-Zip находится здесь: Синтаксис командной строки 7-Zip. Пример вызова командной оболочки из Java: Выполнение команд оболочки в Java. Вам нужно будет дважды вызвать 7-Zip: один раз для извлечения Tar из файла .tar.gz или .tgz и еще раз для извлечения отдельных файлов из Tar.

Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.

Синтаксис командной строки 7-Zip. Пример вызова командной оболочки из Java: Выполнение команд оболочки в Java. Вам нужно будет дважды вызвать 7-Zip: один раз для извлечения Tar из файла .tar.gz или .tgz и еще раз для извлечения отдельных файлов из Tar.

Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.

Синтаксис командной строки 7-Zip. Пример вызова командной оболочки из Java: Выполнение команд оболочки в Java. Вам нужно будет дважды вызвать 7-Zip: один раз для извлечения Tar из файла .tar.gz или .tgz и еще раз для извлечения отдельных файлов из Tar.

Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.

tar.gz или .tgz файл, и снова для извлечения отдельных файлов из Tar.

Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.

tar.gz или .tgz файл, и снова для извлечения отдельных файлов из Tar.

Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.

0
ответ дан 9 December 2019 в 20:48
поделиться

Вы пробовали

gunzip *.gz
0
ответ дан 9 December 2019 в 20:48
поделиться

.gz-файлы (gzip) могут сохранить имя файла сжатого файла. Так, например, FuBar.doc может быть сохранен внутри myDocument.gz, и при соответствующем распаковке файл может быть восстановлен с именем FuBar.doc. К сожалению, java.util.zip.GZIPInputStream не поддерживает никакие способы чтения имени файла, даже если оно хранится внутри архива.

0
ответ дан 9 December 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: