Java: сохранить строку в виде файла GZIP - PullRequest
11 голосов
/ 13 мая 2011

Я новичок в Java, мне нужно что-то вроде this :

String2GzipFile (String file_content, String file_name)
String2GzipFile("Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "lorem.txt.gz")

Я не могу понять, как это сделать.

Ответы [ 3 ]

45 голосов
/ 13 мая 2011

Здесь есть две ортогональные концепции:

  • Преобразование текста в двоичный, обычно с помощью OutputStreamWriter
  • Сжатие двоичных данных, например, с использованием GZIPOutputStream

Итак, в конце концов вы захотите:

  • Создать OutputStream, который записывает туда, куда вы хотите получить результат (например, в файл или в память через ByteArrayOutputStream
  • Обернуть это OutputStream в GZIPOutputStream
  • Обернуть GZIPOutputStream в OutputStreamWriter, используя соответствующую кодировку (например, UTF-8)
  • Написать текстна OutputStreamWriter
  • Закройте писатель, который будет сбрасывать и закрывать все остальное.

Например:

FileOutputStream output = new FileOutputStream(fileName);
try {
  Writer writer = new OutputStreamWriter(new GZIPOutputStream(output), "UTF-8");
  try {
    writer.write(text);
  } finally {
    writer.close();
  }
 } finally {
   output.close();
 }

Обратите внимание, что я закрываюoutput даже если нам не удалось создать средство записи, но нам все равно нужно закрыть writer, если все прошло успешно, чтобы очистить все и завершить запись данных.

3 голосов
/ 13 мая 2011

Посмотрите на GZIPOutputStream - вы должны быть в состоянии использовать это точно так же, как и любой другой выходной поток для записи в файл - он просто автоматически запишет его в сжатом формате gzip.

0 голосов
/ 03 октября 2018

То же решение, что и у Джона, только что использовал try с ресурсами

  try (   FileOutputStream output = new FileOutputStream("filename.gz");
                Writer writer = new OutputStreamWriter(new GZIPOutputStream(output), "UTF-8")) {

            writer.write("someText");


        }
...