第18章 テキストファイルの読み書き(前編)
テキストファイルの読み書きに関する基本的な考え方について説明します
homepage
# **テキストファイルの入出力** *** ## **1.ファイルからテキストを読み込む** ファイルからテキストを読み込むためには様々なクラスが用意されています。まずは基本となる"FileReader"クラスを使ってみます。 <pre><code>File file = new File(file_name); FileReader filereader = new FileReader(file); </code></pre> ### **1-1.テキストを読む** read"メソッドでファイルから文字を1文字読み込みます。読み込んだ値はint型の値として取得できます。 ```public int read() throws IOException``` <br> ``` try{ File file = new File("C:¥¥Test¥¥test.txt"); FileReader filereader = new FileReader(file); int ch = filereader.read(); System.out.println((char)ch); }catch(FileNotFoundException e){ System.out.println(e); }catch(IOException e){ System.out.println(e); } ``` <br> ### **1-2.ファイルの最後まで読み込む** "read"メソッドを使うとまずファイルの先頭から1文字読み込みます。そして自動的に読み込む位置が次の文字に移ります。その為、連続して"read"メソッドを使うとファイルの先頭から順に1文字ずつ読み込んでくれます。そしてファイルの最後に達した時に"-1"という値を返してくれます。 ``` try{ File file = new File("c:¥¥tmp¥¥test.txt"); FileReader filereader = new FileReader(file); int ch = filereader.read(); while(ch != -1){ System.out.print((char)ch); ch = filereader.read(); } }catch(FileNotFoundException e){ System.out.println(e); }catch(IOException e){ System.out.println(e); } ``` <br> ### **1-3.ファイルを閉じる** ファイルに対する全ての処理が終わったら、ファイルを閉じます。"close"メソッドを使います。 ```public void close() throws IOException``` <br> #### **例** [JSample18_1.java] abc.txtファイル(内容"abc")を事前に作成ください。 <pre><code>package JFile; import java.io.File; import java.io.FileReader; import java.io.IOException; public class JSample18_1 { public static void main(String args[]) throws IOException { File file = new File("C:\\Test\\abc.txt"); if (file.exists()) { canReadWrite(file); FileReader fr = new FileReader(file); int frs; while ((frs = fr.read()) != -1) { System.out.print((char) frs); } fr.close(); } } private static void canReadWrite(File file) { if (file.canRead()) { System.out.println("ファイルは読み込み可能です"); } if (file.canWrite()) { System.out.println("ファイルは書き込み可能です"); } } } </code></pre> #### **実行結果** ファイルは読み込み可能です<br> ファイルは書き込み可能です<br> abc <br> ## **2.読み込みの事前確認** "<font size=4>**exists**</font>"メソッドでファイルの存在を確認し、"<font size=4>**isFile**</font>"メソッドで対象のFileクラスオブジェクトがファイルであるかどうかを確認後、"<font size=4>**canRead**</font>"メソッドで読み込み可能かどうかを判別します。 #### **例** [JSample18_2.java] ``` package JFile; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class JSample18_2 { public static void main(String args[]) { try { File file = new File("C:\\Test\\test.txt"); if (fileFile(file)) { System.out.println("ファイルは存在し、読み込み可能です。"); FileReader fr = new FileReader(file); int frs; while ((frs = fr.read()) != -1) { System.out.print((char) frs); } fr.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static boolean fileFile(File file) { if (file.exists()) { if (file.isFile() && file.canRead()) { return true; } } return false; } } ``` #### **実行結果** ファイルは存在し、読み込み可能です。 <br> ## **3.ファイルからまとめてテキストを読む** FileReaderクラスの持つ基本機能でファイルから読み込みは行うのですけど、それにBufferedReaderクラスをかぶせて使うことでまとめて読み込む機能を持てるようになります。 <pre><code>File file = new File(file_name); FileReader filereader = new FileReader(file); BufferedReader br = new BufferedReader(filereader); </code></pre> <br> ## **3-1.テキストを1行単位で読む** 次にファイルの読み込みの仕方です。FileReaerクラスの時と同じく"read"メソッドもありますが、1行まとめて読むための"readLine"メソッドが別に用意されています ```public String readLine() throws IOException``` <br> テキストファイルから1行分のテキストをまとめて読み込みます。注意する点は、改行文字は読み込んだ文字に含まれない事です。よって1行ごとに、改行を含まないテキストを読み込んでString型の値として返してくれます。 このメソッドを使うとまずファイルの先頭の1行を読み込んでくれます。そして自動的に読み込む位置が次の行に移ります。その為、繰り返し"readLine"メソッドを実行することで、ファイルの先頭から最後まで順にテキストを読み込んでくれることになります。 ``` try{ File file = new File("c:¥¥tmp¥¥test.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); String str = br.readLine(); while(str != null){ System.out.println(str); str = br.readLine(); } br.close(); }catch(FileNotFoundException e){ System.out.println(e); }catch(IOException e){ System.out.println(e); } ``` <br> ### **3-2.ファイルを閉じる** また、BufferedReaderクラスを使う場合にも、使い終わったら閉じておく必要があります。BufferedReaderクラスでもFileReaderクラスと同じように"close"メソッドを使います。 ```public void close() throws IOException``` <br> #### **例** [JSample18_3.java] abc123.txtファイル(内容:1行目"abc"、2行目"123")を事前に作成ください。 <pre><code>package JFile; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class JSample18_3 { public static void main(String args[]) { try { File file = new File("C:\\Test\\abc123.txt"); if (fileFile(file)) { System.out.println("ファイルは存在し、読み込み可能です。"); BufferedReader br = new BufferedReader(new FileReader(file)); String fileLine = null; while ((fileLine = br.readLine()) != null) { System.out.println(fileLine); } br.close(); } else { System.out.println("ファイルが見つからないか開けません"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static Boolean fileFile(File file) { if (file.exists()) { if (file.isFile() && file.canRead()) { return true; } } return false; } } </code></pre> #### **実行結果** ファイルは存在し、読み込み可能です。<br> abc<br> 123
content
戻る