2009年6月9日火曜日

Java テキストファイルに文字をまとめて書き込む

バッファに文字を書き込み、書き込んだ文字をまとめてファイルに書き込みます。
ますFileWriterクラスのコンストラクタに書き込むファイルのパスを指定し、FileWriterインスタンスを作成します。
つぎにBufferedWriterクラスのコンストラクタにFileWriterインスタンスを指定し、BufferedWriterインスタンスを作成します。
BufferedWriterクラスのwriteメソッドを使用し、バッファに文字列を書き込んでいきます。
BufferedWriterクラスのflushメソッドを使用し、ファイルに書き込みを行います。
最後に使い終わったBufferedWriterはcloseメソッドを使用して、ファイルを閉じます。
closeメソッドでもflushメソッドが呼ばれます。

またBufferedWriterクラスのnewlineメソッドはOSの標準改行文字を出力します。

package FileAccess;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriteSample02 extends Frame implements ActionListener{
private static final long serialVersionUID = 1L;

public static void main(String args[]){
new FileWriteSample02();
}

Frame frm = this;
TextArea txtBody;
Button btnSave;

public FileWriteSample02(){
this.setTitle("FileWriteSample02");
this.setSize(300,300);


txtBody = new TextArea();
this.add(txtBody,BorderLayout.CENTER);

btnSave = new Button("Save");
btnSave.addActionListener(this);

Panel pnl = new Panel();
pnl.add(btnSave);  
this.add(pnl,BorderLayout.SOUTH);

this.setVisible(true);
}

public void actionPerformed(ActionEvent ev){
SaveFile();
}

/*
* ファイルを保存します。
*/
private void SaveFile(){
//名前を付けて保存ダイアログを表示します。
String path = null;
FileDialog fd = new FileDialog(this , "名前を付けて保存" , FileDialog.SAVE);
try{
fd.setVisible(true);
if (fd.getFile() != null){
path = fd.getDirectory() + fd.getFile();
}
}finally{
fd.dispose();
}
//ファイルパスがnullの場合は処理を中止します。
if (path == null){
return; 
}
//テキストエリアの内容をファイルに書き込みます。
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(path);
bw = new BufferedWriter(fw);
bw.write(txtBody.getText());
bw.newLine();
bw.append("追加書き込み");
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (bw != null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}



PrintWriterクラスを使用する


PrintWriterクラスのprintメソッドやprintlnメソッドを使用してファイルへの書き込みを行います。
BufferedWriterクラスのwriteメソッドは、引数として文字列しか受け取れませんが
PrintWriterクラスのprintメソッドや、printlnメソッドは引数として文字列以外にもint型やboolean型などのプリミティブ型を受け取ることができ、それをそのまま文字列として出力します。
printlnメソッドの場合は最後に改行を行います。
また、PrintWriterクラスのcloseメソッドは例外をスローしません。

package FileAccess;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class FileWriteSample03 extends Frame implements ActionListener{
private static final long serialVersionUID = 1L;

public static void main(String args[]){
new FileWriteSample03();
}

Frame frm = this;
TextArea txtBody;
Button btnSave;

public FileWriteSample03(){
this.setTitle("FileWriteSample03");
this.setSize(300,300);


txtBody = new TextArea();
this.add(txtBody,BorderLayout.CENTER);

btnSave = new Button("Save");
btnSave.addActionListener(this);

Panel pnl = new Panel();
pnl.add(btnSave);  
this.add(pnl,BorderLayout.SOUTH);

this.setVisible(true);
}

public void actionPerformed(ActionEvent ev){
SaveFile();
}

/*
* ファイルを保存します。
*/
private void SaveFile(){
//名前を付けて保存ダイアログを表示します。
String path = null;
FileDialog fd = new FileDialog(this , "名前を付けて保存" , FileDialog.SAVE);
try{
fd.setVisible(true);
if (fd.getFile() != null){
path = fd.getDirectory() + fd.getFile();
}
}finally{
fd.dispose();
}
//ファイルパスがnullの場合は処理を中止します。
if (path == null){
return; 
}
//テキストエリアの内容をファイルに書き込みます。
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter pw = null;
try {
fw = new FileWriter(path);
bw = new BufferedWriter(fw);
pw = new PrintWriter(bw);

pw.println(txtBody.getText());
pw.println(10);
pw.println(true);
pw.println("文字列");
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (pw != null){
pw.close();
}
}
}
}

0 件のコメント: