RTFファイルの読み書き
では、このスタイル付テキストをRTFファイルに保存したり、ファイルから読み込んだりする処理はどのようにすればよいのでしょうか。今回作成したプログラムから、その処理部分をピックアップすると以下のようになります。まず、読み込みからです。
public void readFromFile(){
StyleContext style = new StyleContext();
DefaultStyledDocument doc = new DefaultStyledDocument(style);
RTFEditorKit rtfkit = new RTFEditorKit();
File file = null;
JFileChooser chooser = new JFileChooser();
MyRTFFilter filter = new MyRTFFilter();
chooser.setFileFilter(filter);
int res = chooser.showOpenDialog(this);
if (res == JFileChooser.APPROVE_OPTION){
try {
file = chooser.getSelectedFile();
InputStream stream = new FileInputStream(file);
rtfkit.read(stream, doc, 0);
stream.close();
textpane.setDocument(doc);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
RTFを利用する場合には、「RTFEditorKit」というクラスを利用します。基本的な流れを整理すると以下のようになるでしょう。
・StyledDocumentとRTFEditorKitを用意します。
・Fileインスタンスを用意します。
・FileからFileInputStreamを作成します。
・RTFEditorKitのreadを呼び出し、InputStreamから読み込んだコンテンツをStyledDocumentに挿入します。
・StyledDocumentをJTextPaneに設定します。
続いてRTFへの書き出しです。これも本プログラムに用意されている処理をあげておきましょう。
public void saveToFile(){
Document doc = textpane.getDocument();
RTFEditorKit rtfEditor = new RTFEditorKit();
File file = null;
JFileChooser chooser = new JFileChooser();
int res = chooser.showSaveDialog(this);
if (res == JFileChooser.APPROVE_OPTION){
try {
file = chooser.getSelectedFile();
OutputStream out = new FileOutputStream(file);
rtfEditor.write(out,doc,0,doc.getLength());
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
これも、必要となるのはRTFEditorKitと書き出し先へのOutputStreamです。こちらも処理の流れを整理しておきましょう。
・StyledDocumentを用意しておきます。
・Fileを用意します。
・RTFEditorKitのwriteを呼び出し、指定のStyledDocumentのコンテンツをOutputStreamへ書き出します。
これらのメソッドでは、この他にJFileChooserを使ったファイルダイアログの呼び出しも行っています。Swingでファイルを選択する場合、JFileChooserを使ってファイルダイアログを呼び出しますが、これはFileFilterを用意することで、特定拡張子だけを表示させたりといった制御が行えるようになります。これについても調べてみるとよいでしょう。