2009年6月9日火曜日

Java テキストファイルから1行づつ文字を読み込む

ファイルから1行づつ文字を読み込むにはFileReaderクラスとBufferedReaderクラスを使用します。
FileReaderクラスのコンストラクタに読み込むファイルのパスを指定し、FileReaderクラスのインスタンスを作成します。
BufferedReaderクラスのコンストラクタにFileReaderクラスのインスタンスを指定し、BufferedReaderクラスのインスタンスを作成します。
BufferedReaderクラスのreadLineメソッドを使用してファイルから1行づつ文字を読み込みます。
readメソッドはファイルの終わりに達するとnullを返します。

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.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

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

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

Frame frm = this;
TextArea txtBody;
Button btnOpen;

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


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

btnOpen = new Button("Load");
btnOpen.addActionListener(this);

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

this.setVisible(true);
}

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

/*
* ファイルを開きます。
*/
private void OpenFile(){
//ファイルを開くダイアログを表示します。
String path = null;
FileDialog fd = new FileDialog(this , "ファイルを開く" , FileDialog.LOAD);
try{
fd.setVisible(true);
if (fd.getFile() != null){
path = fd.getDirectory() + fd.getFile();
}
}finally{
fd.dispose();
}
//ファイルパスがnullの場合は処理を中止します。
if (path == null){
return; 
}
//ファイルから1行づつ読み込みます。
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(path);
br = new BufferedReader(fr);

StringBuilder sb = new StringBuilder();
String str;
while((str = br.readLine()) != null){
sb.append(str +"\r\n");
}

txtBody.setText(sb.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try {
if (br != null){
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

0 件のコメント: