private void init(boolean create, boolean isInWritableProject)
			throws IOException, LockException {

		projectDir = localStorageLocator.getProjectDir();
		properties = new PropertyFile(projectDir, PROPERTY_FILENAME, "/", PROPERTY_FILENAME);
		if (create) {
			if (projectDir.exists()) {
				throw new DuplicateFileException(
					"Project directory already exists: " + projectDir.getCanonicalPath());
			}
			File markerFile = localStorageLocator.getMarkerFile();
			if (markerFile.exists()) {
				throw new DuplicateFileException(
					"Project marker file already exists: " + markerFile.getCanonicalPath());
			}
			projectDir.mkdir();
			localStorageLocator.getMarkerFile().createNewFile();
		}
		else {
			if (!projectDir.isDirectory()) {
				throw new FileNotFoundException("Project directory not found: " + projectDir);
			}
			if (properties.exists()) {
				if (isInWritableProject && properties.isReadOnly()) {
					throw new ReadOnlyException(
						"Project " + localStorageLocator.getName() + " is read-only");
				}
				owner = properties.getString(OWNER, getUserName());
			}
			else {
				owner = "<unknown>"; // Unknown owner
			}
		}

		if (isInWritableProject) {
			initLock(create);
		}

		getPrivateFileSystem(create, isInWritableProject);
		getUserFileSystem(isInWritableProject);
	}
Read the contents of the project properties file to include the following values if relavent:
{@value #OWNER}, {@value #SERVER_NAME}, {@value #REPOSITORY_NAME}, {@value #PORT_NUMBER}
@param projectDir project directory (*.rep)
@return project properties or null if invalid project directory specified
Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java