Question: I have a dynamic text file that picks content from a database according to the user's query. I have to write this content into a text file and zip it in a folder in a servlet. How should I do this?

Answer: 
Look at this example:

```
StringBuilder sb = new StringBuilder();
sb.append("Test String");

File f = new File("d:\\test.zip");
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f));
ZipEntry e = new ZipEntry("mytext.txt");
out.putNextEntry(e);

byte[] data = sb.toString().getBytes();
out.write(data, 0, data.length);
out.closeEntry();

out.close();

```

This will create a zip in the root of `D:` named `test.zip` which will contain one single file called `mytext.txt`. Of course you can add more zip entries and also specify a subdirectory like this:

```
ZipEntry e = new ZipEntry("folderName/mytext.txt");

```

You can find more information about compression with Java [here](https://docs.oracle.com/javase/8/docs/api/java/util/zip/package-summary.html).
There is another option by using `zip4j` at <https://github.com/srikanth-lingala/zip4j>

Creating a zip file with single file in it / Adding single file to an existing zip

`new ZipFile("filename.zip").addFile("filename.ext");`
 Or

`new ZipFile("filename.zip").addFile(new File("filename.ext"));`

Creating a zip file with multiple files / Adding multiple files to an existing zip

`new ZipFile("filename.zip").addFiles(Arrays.asList(new File("first_file"), new File("second_file")));`

Creating a zip file by adding a folder to it / Adding a folder to an existing zip

`new ZipFile("filename.zip").addFolder(new File("/user/myuser/folder_to_add"));`

Creating a zip file from stream / Adding a stream to an existing zip
`new ZipFile("filename.zip").addStream(inputStream, new ZipParameters());`