static void compress(File dir, File outputFile) throws FileNotFoundException, IOException {

		List<File> files = new LinkedList<File>();

		ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(outputFile)),
				Charset.forName("big5"));

		files.addAll(Arrays.asList(dir.listFiles()));

		while (!files.isEmpty()) {
			File file = files.remove(0);

			if (file.isDirectory() && !file.getName().equals(".") && !file.getName().equals("..")) {
				files.addAll(Arrays.asList(file.listFiles()));
				continue;
			}

			out.putNextEntry(new ZipEntry(dir.toURI().relativize(file.toURI()).getPath()));

			int c;
			byte[] buf = new byte[1024];
			InputStream is = new BufferedInputStream(new FileInputStream(file));
			while ((c = is.read(buf)) != -1) {
				out.write(buf, 0, c);
			}

			is.close();
		}

		out.close();
	}