Как распаковать *.TGZ файл без изменения исходного файла? [дубликат]


Возможные Дубликаты:

как вы gunzip файл и сохранить .файл gz ?

я распаковываю файл, используя следующую команду:

gunzip -f  test.TGZ

Это дало мне тест.tar-файл, но я потерял теста.Файл TGZ. Есть ли в любом случае, чтобы сохранить исходный файл?

изменить и обновить :
Я вызываю команды распаковки через программу Java. Файл TGZ содержит по крайней мере 1 файл изображения, 1 текст файл и 1 видеофайл.

метод Java: выполните команду

private static InputStream executeCommand(String command, File workingDir)
        throws Exception {
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(command, null, workingDir);
    int exitValue = -1;
    try {
        exitValue = process.waitFor();
    } catch (InterruptedException ignore) {
    }

    if (exitValue != 0) {
        InputStream errStream = process.getErrorStream();
        String errMessage = null;
        if (errStream.available() > 0) {
            byte[] errOutput = new byte[errStream.available()];
            errStream.read(errOutput);
            errMessage = new String(errOutput);
        }

        throw new Exception(
                "Error in ExtractTGZFileTest.executeCommand(command=""
                        + command + "") - " + errMessage);
    }

    return process.getInputStream();
}

public static void main(String[] args) {
    try {
        if (args.length == 2 && args[0].equalsIgnoreCase("tgz")) {
            String archiveName = args[1];
            String tarFilnme = archiveName.substring(0, archiveName
                    .length()
                    - ".tgz".length())
                    + ".tar";
            String gzipCommand = "gzip -c -d " + archiveName + " > "
                    + tarFilnme;
            InputStream is = ExtractTGZFileTest.executeCommand(gzipCommand,
                    null);
        } else if (args.length == 2 && args[0].equalsIgnoreCase("tgz1")) {
            String archiveName = args[1];
            String gzipCommand = "gzip  --decompress --name --verbose "
                    + archiveName;
            InputStream is = ExtractTGZFileTest.executeCommand(gzipCommand,
                    null);
        } else {
            System.err.println("Usage: command <file1> ");
            System.exit(1);
        }
        System.out.println("DONE");
    } catch (Exception ex) {
        ex.printStackTrace();
        System.exit(2);
    }
}

решение: в настоящее время я копирую файл TGZ во временное расположение и работаю с этим файлом.

18
задан Community
29.01.2023 2:12 Количество просмотров материала 2981
Распечатать страницу

3 ответа

использование:

gzip -c -d test.tgz > test.tar

опция '-c' означает запись в стандартный вывод (вместо изменения входного файла); опция'- d 'означает'распаковка'.

вы также можете использовать:

gunzip -c test.tgz > test.tar

если у вас достаточно современная версия GNU 'tar', вы можете просто использовать:

tar -xf test.tgz

если у вас немного более старая версия, вам нужно указать программу сжатия:

tar -xzf test.tgz

на этих версиях, вы можете использовать'bzip2' too:

tar -xf test.tar.bz2 --use-compress-program=bzip2

(в более современных версиях опция '- j' может быть использована для создания bzip2-сжатого tar файла; код распаковки автоматически определяет правильный декомпрессор.)

12
отвечен Jonathan Leffler 2023-01-30 10:00

Если вы пытаетесь распаковать GZipped файл через Java, вы можете рассмотреть возможность использования java.util.промелькнуть.Zip-файл класса. Если передать этому классу ссылку на файл zip, можно выполнить итерацию по записям и получить к ним доступ как к InputStreams, например:

String archiveName = args[1];
ZipFile zf = new ZipFile(archiveName);
Enumeration<? extends ZipEntry> entries = zf.entries();
ZipEntry nextElement = entries.nextElement();       
InputStream inputStream = zf.getInputStream(nextElement);
// use it: read data, serialise back to file, whatever
3
отвечен DoctorRuss 2023-01-30 12:17

Я согласен с Джонатаном Леффлером, это java-программист, спрашивающий, как получить доступ к сжатому архиву из его/ее java-программы. Тот факт, что это начинающий программист, пытающийся сделать это неправильно (через ОС), не меняет того факта, что это программный вопрос, который принадлежит StackOverflow.

чтобы ответить на исходный вопрос, doctorruss правильно предлагает использовать класс. Чтобы получить доступ .смола. ,смола.gz или .tgz файл, вы должны использовать библиотеку, способную доступ к архивам tar. пакет com.лед.tar реализует архив tar io пакет и возможно объединить этот пакет с java.util.zip-пакет для обработки .смола.GZ файлы. Вы можете либо загрузить напрямую, либо найти его в org.апаш.инструментальные средства.деготь, который теперь является частью муравья.сосуд.

1
отвечен dan 2023-01-30 14:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх