2011-05-13 5 views
8

Tôi java mới bắt đầu, tôi cần một cái gì đó giống như this:java: lưu chuỗi dưới dạng file gzip

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

tôi không thể tìm ra cách để làm điều đó.

Trả lời

39

Có hai khái niệm trực giao ở đây:

  • Chuyển đổi văn bản sang nhị phân, thường thông qua một OutputStreamWriter
  • Nén dữ liệu nhị phân, ví dụ sử dụng GZIPOutputStream

Vì vậy, cuối cùng bạn sẽ muốn:

  • Tạo một OutputStream mà ghi vào bất cứ nơi nào bạn muốn kết quả (ví dụ như một tập tin hoặc trong bộ nhớ thông qua một ByteArrayOutputStream
  • Bọc rằng OutputStream trong một GZIPOutputStream
  • GZIPOutputStream trong một OutputStreamWriter sử dụng charset thích hợp (ví dụ như UTF-8)
  • Viết văn bản để OutputStreamWriter
  • Đóng tác giả, thao tác này sẽ tuôn ra và đóng mọi thứ khác.

Ví dụ:

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

Lưu ý rằng tôi đang đóng output thậm chí nếu chúng ta thất bại trong việc tạo ra các nhà văn, nhưng chúng tôi vẫn cần phải đóng writer nếu mọi thứ đều thành công, để tuôn tất cả mọi thứ và kết thúc ghi dữ liệu.

+0

Tôi đã thử sử dụng ByteArrayOutputStream, nhưng ví dụ của bạn hoạt động hoàn hảo. Cảm ơn bạn – Luistar15

+0

@ user752679: Ban đầu tôi đã viết một mẫu bằng cách sử dụng ByteArrayOutputStream, nhưng khi câu hỏi của bạn cho biết bạn muốn viết nó vào một tệp ... –

2

Hãy xem GZIPOutputStream - bạn sẽ có thể sử dụng điều này theo cách giống như bất kỳ đầu ra nào khác để ghi vào một tệp - nó sẽ tự động ghi nó ở định dạng nén gzip.