@Override
	public String giveFile(SymbolFileInfo symbolFileInfo, File file, String filename,
			TaskMonitor monitor) throws IOException {
		initStorageLevelIfNeeded(monitor);
		filename = FilenameUtils.getName(filename); // make sure no relative path shenanigans
		String relativeDestinationFilename = getUniqueFileDir(symbolFileInfo) + filename;
		File destinationFile = new File(rootDir, relativeDestinationFilename);
		FileUtilities.checkedMkdirs(destinationFile.getParentFile());
		if (destinationFile.isFile()) {
			Msg.info(this, logPrefix() + ": File already exists: " + destinationFile);
			if (!file.delete()) {
				Msg.warn(this, logPrefix() + ": Unable to delete source file: " + file);
			}
			return relativeDestinationFilename;
		}
		monitor.setMessage("Storing " + filename + " in local symbol store ");
		if (!file.renameTo(destinationFile)) {
			throw new IOException("Could not move " + file + " to " + destinationFile);
		}

		return relativeDestinationFilename;
	}
Non-task monitor variant of {@link #isValid(TaskMonitor)}.

@return boolean true if this is a valid symbol store
Ghidra/Features/PDB/src/main/java/pdb/symbolserver/LocalSymbolStore.java