private static void recursiveZip(final ZipOutputStream zos, final File root, final File base) throws IOException { final String[] dirList = base.list(); for (final String element : dirList) { final File f = new File(base, element); if (f.isDirectory()) { recursiveZip(zos, root, f); } else { final FileInputStream fis = new FileInputStream(f); try { if (!FilenameUtils.isExtension(f.getName(), Arrays.asList("js", "coffee", "ts", "json", "css", "less"))) { writeDeflate(f, fis, zos, root); } else { writeStored(f, fis, zos, root); } } finally { IOUtils.closeQuietly(fis); } } } }