public String toString() {
   return "FSDir{"
       + "dir="
       + dir
       + ", children="
       + (children == null ? null : Arrays.asList(children))
       + "}";
 }
  /** Find the corresponding meta data file from a given block file */
  private static File findMetaFile(final File blockFile) throws IOException {
    final String prefix = blockFile.getName() + "_";
    final File parent = blockFile.getParentFile();
    File[] matches =
        parent.listFiles(
            new FilenameFilter() {
              public boolean accept(File dir, String name) {
                return dir.equals(parent)
                    && name.startsWith(prefix)
                    && name.endsWith(METADATA_EXTENSION);
              }
            });

    if (matches == null || matches.length == 0) {
      throw new IOException("Meta file not found, blockFile=" + blockFile);
    } else if (matches.length > 1) {
      throw new IOException("Found more than one meta files: " + Arrays.asList(matches));
    }
    return matches[0];
  }