public void unzipFiles() {
		GutenbergCrawlerHelper.unzipInit();
		File zipFileDir = new File(GUTENBERG_ZIP_DIR);
		File[] zips = zipFileDir.listFiles();
		List<File> files = new ArrayList<File>();
		
		for (int i = 0; i < zips.length; i++) {
			
			if (!SparkUtils.isZipFile(zips[i].getName())) {
				SparkUtils.getLogger().info("not a zip file:" + zips[i].getName());
				continue;
			}
			
			int index = zips[i].getName().lastIndexOf(".");
			String name = zips[i].getName();
			if (index != -1) {
				name = zips[i].getName().substring(0, index);
			}
			synchronized (GutenbergCrawlerHelper.unzippedFiles) {
				if (GutenbergCrawlerHelper.unzippedFiles.contains(name)) {
					continue;
				}
			}
			files.add(zips[i]);
			if ((files.size() + 1) % GUTENBERG_ROBOT_DISPATCH_THRESHOLD == 0) {
				// dispatch file tasks
				dispatchUnzipTask(files);
				synchronized (files) {
					files.clear();	
				}
			}
		}
		if (files.size() != 0) {
			dispatchUnzipTask(files);
		}
	}