Reputation: 173
I've tried searching and couldn't find anything. What I'm trying to do is I'm looping through a list where I'm constructing a string from a combination of items from multiple lists. I then want to dump these strings to a gzipped file. I got it working with just dumping it to a plain ascii text file but I can't seem to get it to work with the gzipoutputstream. So basically,
Loop create string dump string to gzipped file endloop
If possible, I'd like to avoid dumping to a plain text file then gzipping it since these files will be almost 100 meg each.
Upvotes: 12
Views: 23474
Reputation: 327
try {
String srcString = "the string you want to zip.";
ByteArrayOutputStream stream = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(stream);
gzip.write(srcString.getBytes(StandardCharsets.UTF_8));
gzip.close();
// the gzip bytes you get
byte[] zipBytes = stream.toByteArray();
} catch (IOException ex) {
// ...
}
Upvotes: 0
Reputation: 3580
Yes, you can do this no problem. You just need to use a writer to convert from your character based strings to the byte based gzip stream.
BufferedWriter writer = null;
try {
GZIPOutputStream zip = new GZIPOutputStream(
new FileOutputStream(new File("tmp.zip")));
writer = new BufferedWriter(
new OutputStreamWriter(zip, "UTF-8"));
String[] data = new String[] { "this", "is", "some",
"data", "in", "a", "list" };
for (String line : data) {
writer.append(line);
writer.newLine();
}
} finally {
if (writer != null)
writer.close();
}
Also, remember gzip just compresses a stream, if you want embeded files, see this post: gzip archive with multiple files inside
Upvotes: 25