/** 現在表示中のトピックを除いてメモリ上から削除する また,削除したトピックはファイルへと保存する */
 public void garbageCollection() {
   // メモリ上に保持されているトピックをファイルへ移動する
   saveTopicToFile();
   // トピック一覧を取得
   Set<Pair<String, String>> topics = localTopic.getTopics();
   if (topics == null) {
     return;
   }
   // 現在表示しているトピック以外を削除
   for (Pair<String, String> topic : topics) {
     if (topic.equals(getCurrentTopic())) {
       continue;
     }
     remove(topic.getFirst(), topic.getSecond());
   }
 }
  /**
   * メモリ上に保持しているトピックをファイルへ保存する
   *
   * @param topic
   * @param category
   * @return
   */
  public boolean saveTopicToFile() {
    Set<Pair<String, String>> topics = localTopic.getTopics();

    // データが一つも存在しない
    if (topics == null) {
      return false;
    }
    // ログディレクトリを作成
    try {
      File logDir = new File("./" + logDirectory);
      if (!logDir.exists()) {
        // ディレクトリが存在しないので作成する
        if (logDir.mkdir() == false) {
          throw new IOException(logDirectory + "ディレクトリを作成できませんでした.");
        }
      }

      // メモリ上に存在するすべてのトピックをファイルへ保存する
      for (Pair<String, String> topic : topics) {
        // ファイル名 ./カテゴリ名/トピック名.dat
        String filename =
            "./" + logDirectory + "/" + topic.getSecond() + "/" + topic.getFirst() + ".dat";
        // トピック保存ディレクトリを作成
        // ディレクトリ名はトピックのカテゴリ名
        File dir = new File("./" + logDirectory + "/" + topic.getSecond());
        if (!dir.exists()) {
          // ディレクトリが存在しないので作成する
          if (dir.mkdir() == false) {
            throw new IOException("ディレクトリを作成できませんでした.");
          }
        }

        FileOutputStream fos = new FileOutputStream(filename);
        OutputStreamWriter osw = new OutputStreamWriter(fos, charsetName);
        BufferedWriter bw = new BufferedWriter(osw);

        // ファイル書き込みデータ
        StringBuffer writeData =
            new StringBuffer("<?xml version=\"1.0\" encoding=\"" + charsetName + "\"?>\n");
        writeData.append("<topic>\n");

        SortedSet<CommentElement> comments = localTopic.get(topic.getFirst(), topic.getSecond());
        // トピックの所属するすべてのコメントデータを書き込む
        for (CommentElement comment : comments) {
          writeData.append(commentElementToXML(comment) + "\n");
        }
        writeData.append("</topic>");
        // ファイル書き込み
        bw.write(writeData.toString());
        // ファイルを閉じる
        bw.close();
        osw.close();
        fos.close();
      }
    } catch (Exception e) {
      System.err.println(e);
      e.printStackTrace();
    }

    return false;
  }