2011-05-13 13 views
8

Ben java acemi, this gibi bir şeye ihtiyacım var:java: dize gzip dosyası olarak kaydet

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

Bunu nasıl yapacağımı anlayamıyorum.

cevap

39

burada iki ortogonal kavram vardır:

  • ikili veri sıkıştırmak, tipik olarak bir OutputStreamWriter
  • aracılığıyla, ikili bir metin dönüştürme, örneğin, için

GZIPOutputStream kullanarak Yani sonunda size isteyeceksiniz:

  • bir ByteArrayOutputStream
  • Wrap aracılığıyla size sonucu istediğiniz yere yazar bir OutputStream (örneğin bir dosya veya bellekte yarat o uygun bir karakter kümesi kullanılarak GZIPOutputStream
  • Wrap bir OutputStreamWriter yılında GZIPOutputStream yılında OutputStream (örneğin UTF-8)
  • metni yazın OutputStreamWriter
  • Her şeyi temizleyecek ve kapatacak olan yazmacını kapatın.
  • Örneğin

: Biz yazar oluşturmak için başarısız, ama biz hala her şey başarılı olursa writer kapatmaya gerek bile her şeyi temizlemek için, output kapatıyorum

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(); 
} 

Note ve verileri yazmayı bitir.

+0

ByteArrayOutputStream'i kullanmayı denedim, ancak örneğiniz mükemmel çalışıyor. Teşekkür ederiz – Luistar15

+0

@ user752679: Aslen ByteArrayOutputStream kullanarak bir örnek yazdım, ancak sorunuzu bir dosyaya yazmak istediğinizi söylediğiniz gibi ... –

2

GZIPOutputStream'a bir göz atın - bunu bir dosyaya yazmak için herhangi bir diğer çıkış yolu ile aynı şekilde kullanabilmeniz gerekir - sadece otomatik olarak gzip sıkıştırılmış biçimde yazacaktır.