private void writePackFile(File outputDir, Array<Page> pages, String packFileName)
      throws IOException {
    if (!packFileName.endsWith(".pack")) packFileName = packFileName + ".pack";

    File packFile = new File(outputDir, packFileName);

    if (packFile.exists() && false) {
      // Make sure there aren't duplicate names.
      TextureAtlasData textureAtlasData =
          new TextureAtlasData(new FileHandle(packFile), new FileHandle(packFile), false);
      for (Page page : pages) {
        for (Rect rect : page.outputRects) {
          String rectName = Rect.getAtlasName(rect.name, settings.flattenPaths);
          for (Region region : textureAtlasData.getRegions()) {
            if (region.name.equals(rectName)) {
              throw new GdxRuntimeException(
                  "A region with the name \""
                      + rectName
                      + "\" has already been packed: "
                      + rect.name);
            }
          }
        }
      }
    }

    FileWriter writer = new FileWriter(packFile, true);
    for (Page page : pages) {
      writer.write("\n" + page.imageName + "\n");
      writer.write("format: " + settings.format + "\n");
      writer.write("filter: " + settings.filterMin + "," + settings.filterMag + "\n");
      writer.write("repeat: " + getRepeatValue() + "\n");

      for (Rect rect : page.outputRects) {
        //				System.out.println("rect.name = " + rect.name);
        writeRect(writer, page, rect, rect.name);
        for (Alias alias : rect.aliases) {
          Rect aliasRect = new Rect();
          aliasRect.set(rect);
          alias.apply(aliasRect);
          writeRect(writer, page, aliasRect, alias.name);
        }
      }
    }
    writer.close();
  }