Javaコラム Javaエンジニアのためのお役立ちコラム

Javaのテキストファイルの読み書きを解説!

 
Javaのテキストファイルの読み書きを解説!

SE
Javaでもテキストファイルを読み書きできると聞きました。

PM
簡単なソースでテキストの読み書きが可能です。

Javaによるテキストファイル読み書きとは?


パソコンを使う人ならテキストファイルと言えばほとんどの人がご存じでしょう。.txt拡張子で文字だけが書かれているシンプルなドキュメントファイルのことです。これをJavaで読み込んだり、書き込んだりすることは手軽に行えます。
ただしテキストファイルは文字コードについては注意する必要があります。それを含めたJavaによるテキストファイル読み書きを分かりやすく説明するので、是非ご覧ください。

テキストファイルの読み込み

まずはJavaでテキストファイルを読み込む方法です。以下が簡単なサンプルです。なおソースの先頭には「import java.io.*;」を記述してください。

FileReaderクラスで1文字ずつ読み込める

上のJavaのサンプルを説明しましょう。まずCドライブのtestフォルダ内のtest.txtファイルの情報を、Fileクラスで取得します。そしてFileReaderクラスを生成します。その後FileReaderクラスのreadメソッドで1文字読み込んで変数cに入れます。
cが-1だった場合はファイルを全部読み込んだことになるので、breakでwhileループを抜けます。-1以外の場合は文字コードの数値が入っているので、(char)のキャストでchar型に変換してString型のstrに文字列として追加します。

ファイルアクセス処理はtry~catchで囲むこと

全部読み終わってwhileループを抜けた後はstrを表示して、ファイルをcloseしています。closeで閉じるのを忘れないようにしましょう。忘れると後でまたファイルを開こうとしてもできなくなったりします。
もしtest.txtが無いなどでファイルが見つからないと、Exceptionが発生します。その場合はcatchに飛んで「指定されたファイルが見つかりません。」などと表示するようにしています。このようにExceptionが発生する可能性がある処理は、必ずtry~catchで囲みましょう。

テキストの読み込みにはBufferedReaderを使う

ここまでのやり方でテキストファイルを読み込むことはできますが、実はFileReaderで1文字ずつ読み込むのは効率が悪く、あまり良いやり方ではないのです。Javaでは以下のようにBufferedReaderを使う方が一般的です。

readLineで1行ずつ読み込める

上のJavaのサンプルでは、FileReaderのインスタンスをBufferedReaderに渡しています。そしてreadLineで改行コードかファイル末端まで読み込みます。つまり1文字ずつではなく1行ずつ読み込んでいるのです。ファイル末端まで行くとreadLineはnullを返すので、そこで終了します。
なおreadLineで改行まで読んだ場合、返す文字列に改行コードは含まれないので、”\r\n”を追加しています。Windows環境はこれでいいのですが、Macなら”\r”、UNIX/Linuxなら”\n”としてください。

Javaのテキストファイル書き込み

次はJavaでテキストファイルの書き込みをしましょう。以下がサンプルです。

BufferedWriterでバッファリングしながらテキスト書き込みできる

FileWriterとBufferedWriterを使ってテキストファイルを作成してwriteで書き込んでいます。newLineは実行している環境に応じた改行コードを挿入してくれます。BufferedWriterを使用する場合、writeの度にファイルアクセスせずに一旦メモリにバッファリングしています。
そのためどこかのタイミングでflushを呼び出して実際にファイルに書き込む必要があります。この仕組みの方が毎回ファイルに書き込むよりも、パフォーマンスが良くなります。なおcloseする時にもflushは行われるので、このサンプルのように少し書き込むだけなら無くてもかまいません。

ファイルの存在確認と追記

もし書き込みをしようとしたファイルが既に存在している場合は、どうすればよいのでしょうか。上のJavaサンプルの先頭を、以下のように変えてみましょう。

これでtest.txtがすでにある場合は追記で書きこまれるようになります。この追記モードのtrue指定が無い場合は、ファイルの内容は消えて上書きされます。

文字コードの違いについて

最後に、冒頭で触れた文字コードの問題について触れておきましょう。テキストファイルに書き込む文字コードは一種類ではありません。主に以下の3つがあります。
Shift-JIS 日本のWindowsで使用されている。
UTF-8 環境に依存せず、世界中の全ての文字を扱うことができる。
EUC-JP 日本のLinux、UNIXで使用されている。
こうしてみるとUTF-8がベストのように思えますが、UTF-8はあらゆる文字を扱える分、サイズが大きくなるという欠点があります。そのため日本ではShift-JISが多く使われています。

文字コードを指定したテキストファイル書き込み

以下が文字コードを指定してテキストファイルを書き込むJavaのサンプルです。OutputStreamWriterを使用してUTF-8でファイルを作成しています。

文字コードを指定したテキストファイル読み込み

次は文字コードを指定してテキストファイルを読み込むJavaサンプルです。UTF-8として読み込んでいますが、これをShift-JISに変えて上のサンプルで作成したファイルを読み込むと、表示が文字化けをします。試してみてください。

SE
読み込みや書き込みのための、クラスが存在するのですね。

PM
これらは基礎知識にあたりますので、ぜひマスターしましょう。

Javaのテキスト読み書きはファイル操作の基本

Javaのテキストファイルの読み書きについて解説しましたが、ご理解頂けましたでしょうか。テキストの扱いはファイル操作の基礎ですが、これを理解すれば違う形式のファイルも難なく扱えるようになるでしょう。是非マスターしてください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags