@Override
	public String decompress(String inFileName) throws Exception {
		// the input extension must be .gz
		if (!getExtension(inFileName).equalsIgnoreCase("gz")) {
			return "Your File has wrong extension.";
		}

		System.out.println("Decompressed file: " + inFileName);
		GZIPInputStream in = null;

		in = new GZIPInputStream(new FileInputStream(inFileName));
		FileOutputStream out = null;
		File temFile = new File(inFileName);
		// remove the extension and put the new file into tmp folder
		String outFileName = this.saveDir.getAbsolutePath() + "/"
				+ getFileName(temFile.getName());
		out = new FileOutputStream(outFileName);
		// read and write from inputfile to outputfile through a buffer bytes
		// this buff array could be improved by using PureBAOS class, but I
		// haven't fully
		// understand the GZIP mechanism
		byte[] buf = new byte[20480];
		int len;
		while ((len = in.read(buf)) > 0) {
			out.write(buf, 0, len);
		}
		System.out.println("To: " + outFileName);
		in.close();
		out.close();
		return outFileName;
	}