1

私は現在、D&D (ダンジョンズ アンド ドラゴンズ) として知られるペンと紙の rp ゲームのエンカウンター ジェネレーターに取り組んでいます。メモ帳ファイルに書かれたモンスターのアーカイブがあります。ユーザーが必要なフィルターの使用を終了し、「生成」を押すと、プログラムはモンスターをフィルター処理し、指定されたモンスターを含むメモ帳ファイルを読み取り、それを新しいメモ帳ファイルに書き込みます。実行可能な exec)。メモ帳からメモ帳に読み書きすると、これはすべて意図したとおりに機能しました。その後、テスターからいくつかの写真とテキストの別の形式が欲しいというフィードバックを受け取りました。そこで、アーカイブファイルをRTF(ワードパッド/リッチテキストファイル)に変更し、完成したファイルも同じ形式に変更しました。今の私の悩み、

リーダーとライターのメソッドのコードは次のとおりです。

public void readerAndWriter()throws IOException
{
    destination = "Encounter.rtf";
    File EncounterFile = new File(source);
    FileInputStream fis =new FileInputStream(EncounterFile);
    BufferedReader in = new BufferedReader(new InputStreamReader(fis));

    FileWriter writer = new FileWriter(destination,true);
    BufferedWriter out = new BufferedWriter(writer);

    String aLine = null;
    while((aLine = in.readLine())!= null)
    {
        out.write(aLine);
        out.newLine();
    }
    in.close();
    out.close();
}

リーダーおよびライター メソッドを使用しているメソッドのコード スニペットを次に示します。

if (monsters.get(t).getRace() == monsters.get(u).getRace())
{
             if (monsters.get(t).getCr() + monsters.get(u).getCr() ==  
                 getChosenCr())
                {

                      readAndWrite.setSource(monsters.get(t).getFilePath());
                      readAndWrite.readerAndWriter();
                      readAndWrite.setSource(monsters.get(u).getFilePath());
                      readAndWrite.readerAndWriter();

                        correctMonster = true;
                 }
else
   etc etc

すべてのヒントとヒントをいただければ幸いです。

4

1 に答える 1

0

私があなたのコードを正しく理解していれば、いくつかのファイルの内容を互いに追加するだけです (モンスター ファイル)。テキストファイルでそれを行うことはできますが、RTF はそれほど単純ではありません (RTF コンテンツに明白に添付された次の RTF ドキュメントを RTF が無視するため、最初のモンスターしか表示されないというのが私の推測です)。代わりに、する必要があります

  1. Document宛先ファイルのインスタンスを作成します。
  2. ソース ファイルから目的のコンテンツを s に読み込みますjavax.swing.text.Document
  3. 適切な API を使用して、ソース Document のコンテンツを宛先 Document に挿入します。
  4. 宛先ドキュメントを新しいファイルに書き込みます。

ControlAltDel がコメントしたように、これにはRTFEditorKitを使用できます (例のコードはhttp://www.programcreek.com/java-api-examples/index.php?api=javax.swing.text.rtf. RTFEditorKit ):

/**
 * Reads the file specified by path and writes its text content to out.
 * @param out Writer to output the text content
 * @param path name of an RTF file to read from
 */
public void simpleRtfExample(Writer out, String path) throws IOException {
    FileInputStream in = null;
    try {
        in = new FileInputStream(path);
        byte[] buffer = new byte[in.available()];
        in.read(buffer, 0, in.available());
        String input = new String(buffer);
        String result = null;
        try {
            RTFEditorKit rtfEditor = new RTFEditorKit();
            Document doc = rtfEditor.createDefaultDocument();

            // read the source RTF into doc:
            rtfEditor.read(new StringReader(input), doc, 0);

            // Get the text of the document as String.
            // Here you could use doc's API to access
            // its content in a more sophisticated manner.
            result = doc.getText(0,doc.getLength());
        } catch (Exception e) {
            e.printStackTrace();
        }
        out.write(result);
    } finally {
        IOUtils.closeQuietly(in);
    }
}
于 2015-09-08T14:21:30.813 に答える