code: public Map<String, Properties> parse(File belDataFile) throws IOException {
          RandomAccessFile raf = null;
  
          try {
              raf = new RandomAccessFile(belDataFile, "r");
  
              Map<String, Properties> blockProperties =
                      new LinkedHashMap<String, Properties>();
  
              String line;
              String currentBlock = null;
              boolean aborted = false;
              while (!aborted && (line = raf.readLine()) != null) {
                  line = line.trim();
                  if (line.startsWith("#") || line.equals("")) {
                      // skip commented or blank lines.
                      continue;
                  } else if (line.charAt(0) == '['
                          && line.charAt(line.length() - 1) == ']') {
                      currentBlock = line.substring(1, line.length() - 1).trim();
  
                      // if we have reached the VALUE_BLOCK then we're done
                      // parsing the header.
                      if (VALUES_BLOCK.equals(currentBlock)) {
                          nextCharacterOffset = raf.getFilePointer();
                          aborted = true;
                          continue;
                      }
  
                      blockProperties.put(currentBlock, new Properties());
                  } else {
                      Matcher propertyLineMatcher = PROPERTY_LINE_REGEX
                              .matcher(line);
  
                      if (propertyLineMatcher.matches()) {
                          blockProperties.get(currentBlock).put(
                                  propertyLineMatcher.group(1).trim(),
                                  propertyLineMatcher.group(2).trim());
                      }
                  }
              }
  
              return blockProperties;
          } finally {
              if (raf != null) {
                  raf.close();
              }
          }
      }
docs: Parse the BEL Data header {@link File} to a {@link Map} of block name
  to block properties held in a {@link Properties} object.
  
  @param belDataFile {@link File}, the BEL data document file to parse
  @return {@link Map} of {@link String} to {@link Properties} the
  properties indexed in a block name
  @throws IOException, if there was an error reading from {@code belDataFile}