private void decompileClassFileToStream(OutputStream os, TaskMonitor monitor)
			throws CancelledException, IOException {
		File tempDir = null;
		try {
			tempDir = new File(Application.getUserTempDirectory(), "JavaClassDecompilerFileSystem");

			File tempClassFile = new File(tempDir, containerFSRL.getName());
			FSUtilities.copyByteProviderToFile(provider, tempClassFile, monitor);

			// tempDestJavaSrcFile (ie. "javaclass.java") contents are automagically
			// created by the Jad process based on the class name it finds inside
			// the binary "javaclass.class" file.  Class, class, class.
			File tempDestJavaSrcFile = new File(tempDir, javaSrcFilename);

			JadProcessWrapper wrapper = new JadProcessWrapper(tempClassFile);
			JadProcessController controller = new JadProcessController(wrapper, className);
			controller.decompile(5, monitor);

			FileUtilities.copyFileToStream(tempDestJavaSrcFile, os, monitor);
		}
		finally {
			FileUtilities.deleteDir(tempDir, monitor);
		}
	}
Filesystem that decompiles a java .class file (using external JAD decompiler) into
a java classname.java source text file and presents the source text file as its
only file in the filesystem.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/java/JavaClassDecompilerFileSystem.java