Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java TIPS
  4. Javaのテキストファイルの読み書きを解説!

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

  • Java TIPS
  • Java入門
公開日時:   更新日時:
Javaのテキストファイルの読み書きを解説!
この記事でわかること

    システム
    エンジニア
    Javaでもテキストファイルを読み書きできると聞きました。

    プロジェクト
    マネージャー
    簡単なソースでテキストの読み書きが可能です。

    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に変えて上のサンプルで作成したファイルを読み込むと、表示が文字化けをします。試してみてください。

    システム
    エンジニア
    読み込みや書き込みのための、クラスが存在するのですね。

    プロジェクト
    マネージャー
    これらは基礎知識にあたりますので、ぜひマスターしましょう。

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

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

    FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job