/** 現在表示中のトピックを除いてメモリ上から削除する また,削除したトピックはファイルへと保存する */ 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; }