This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
The PrintWriter will line-buffer the output; the last line won't necessarily be sent along until you call flush() on the PrintWriter, or until you close it. So by closing the gzip stream first, you're actually closing it before all the data can be sent to it.
You actually only need to call close on the PrintWriter; it will call close on the gzip stream, which will in turn close the file stream, and everything will work fine.