private void unzip(TaskMonitor monitor)
			throws ZipException, IOException, FileNotFoundException, CancelledException {

		FileSystemService fsService = FileSystemService.getInstance();
		try (GFileSystem fs = fsService.openFileSystemContainer(jarFile, monitor)) {
			monitor.setIndeterminate(true);
			monitor.initialize(0);
			for (GFile file : fs) {
				if (monitor.isCancelled()) {
					break;
				}
				File outputFile = new File(outputDirectory.getAbsolutePath(), file.getPath());
				if (!FileUtilities.isPathContainedWithin(outputDirectory, outputFile)) {
					throw new IOException("Extracted file " + outputFile.getPath() +
						" would be outside of root destination directory: " + outputDirectory);
				}
				FileUtilities.checkedMkdirs(outputFile.getParentFile());
				if (!file.isDirectory()) {
					monitor.setMessage("Unzipping jar file... ");
					monitor.incrementProgress(1);
					try (ByteProvider fileBP = fs.getByteProvider(file, monitor)) {
						FSUtilities.copyByteProviderToFile(fileBP, outputFile, monitor);
					}
				}
			}
		}
	}
Returns true if the filename appears to be a jar file
@param filename string filename
@return boolean true if it is probably a jar file
Ghidra/Features/FileFormats/src/main/java/ghidra/file/jad/JarDecompiler.java