readメソッドを使用して読み込んだ値は文字コードを表すint型の値として取得でき、char型にキャストすることで文字に変換します。
readメソッドはファイルの終わりに達すると-1を返します。
package FileAccess; import java.awt.*; import java.awt.event.*; import java.io.*; public class FileReadSample01 extends Frame implements ActionListener{ private static final long serialVersionUID = 1L; public static void main(String args[]){ new FileReadSample01(); } Frame frm = this; TextArea txtBody; Button btnOpen; public FileReadSample01(){ this.setTitle("FileReadSample01"); 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; StringBuffer sb = null; try { fr = new FileReader(path); sb = new StringBuffer(); int ch; while ((ch = fr.read()) != -1){ sb.append((char)ch); } txtBody.setText(sb.toString()); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try { if (fr != null){ fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
readメソッドは他にもいくつかのオーバーロードがあります。
int read() | 単一文字を読み込みます。 |
---|---|
int read(char[] cbuf) | 引数に指定した配列に文字を読み込みます。 |
abstract int read(char[] cbuf,int off,int len) | 文字を読み込んでcbufのoffに指定したオフセット位置からlenバイト分を格納します。 |
ファイルの最初から10バイト分のデータを取得するするには、int read(char[] cbuf)を使用します。
FileReader fr = null; char[] buff = new char[10]; try { fr = new FileReader(path); fr.read(buff); txtBody.setText(new String(buff)); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try { if (fr != null){ fr.close(); } } catch (IOException e) { e.printStackTrace(); } }
read(char[] cbuf,int off,int len)はファイルの先頭から文字を読み込んでcbufのoffに指定したオフセット位置からlenバイト分を格納します。
ファイルの先頭から文字を読み込み、buff配列のオフセットが3の位置から7バイト分を読み込みます。
FileReader fr = null; char[] buff = new char[10]; try { fr = new FileReader(path); fr.read(buff,3,7); System.out.println(new String(buff)); txtBody.setText(new String(buff,3,7)); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try { if (fr != null){ fr.close(); } } catch (IOException e) { e.printStackTrace(); } }
0 件のコメント:
コメントを投稿