001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.util; 020 021import java.io.File; 022import java.io.FileInputStream; 023import java.io.FileOutputStream; 024import java.io.IOException; 025import java.util.zip.ZipEntry; 026import java.util.zip.ZipOutputStream; 027 028/** 029 * Uses java.util.zip to compress an input file and store it to the given output. Only valid for single files, not directories. 030 */ 031public class ZipUtil { 032 /** Utility class; instances carry no state. */ 033 public ZipUtil() {} 034 035 /** 036 * Compresses a single input file into a ZIP container at {@code output}. 037 * 038 * @param input source file 039 * @param output destination ZIP file 040 * @throws IOException if reading {@code input} or writing {@code output} fails 041 */ 042 public static void zipFile(File input, File output) throws IOException { 043 FileInputStream in = null; 044 ZipOutputStream out = null; 045 try { 046 in = new FileInputStream(input); 047 out = new ZipOutputStream(new FileOutputStream(output)); 048 out.putNextEntry(new ZipEntry(input.getName())); 049 byte[] buffer = new byte[4096]; 050 int bytesRead; 051 while ((bytesRead = in.read(buffer)) != -1) { 052 out.write(buffer, 0, bytesRead); 053 } 054 out.flush(); 055 out.closeEntry(); 056 out.finish(); 057 } finally{ 058 if (in != null) { 059 in.close(); 060 } 061 if (out != null) { 062 out.close(); 063 } 064 } 065 } 066}