Google検索エンジン

トップページ » Javaプログラミング講座(応用編) » Javaプログラムでファイルに書き込み・上書きする方法


Javaプログラムでファイルに書き込み・上書きする方法

  • Javaプログラムでファイルを読み込むときは、FileWriterクラスで用意されているwrite()メソッドを使います。 FileWriterクラスは、Fileクラスを拡張する形で利用しますので、「java.io.File」、「java.io.FileWriter」の両クラスをインポートする必要があります。 また、例外クラスとして、「java.io.IOException」をインポートする必要があります。

    まず、「new File(編集するファイル名)」で、Fileクラスのオブジェクトを作成します。 ファイル名は絶対パスで指定しても相対パスで指定しても構いませんが、拡張子まで記述してください。 絶対パスで指定する場合は、「new File("c:¥¥test¥¥ファイル名.txt")」の様に記述します。

    次にFileWriterクラスをインスタンス化します。 このとき「IOException」例外が発生する可能性がありますので、例外処理「try、catch」文の中でインスタンス化します。 ファイルに書き込みするときは、FileWriterクラスのwrite()メソッドを実行します。 write()メソッドは書き込む値として文字コードや文字列を指定することができます。

    最後にFileWriterクラスのオブジェクトに対してclose()メソッドを実行してファイルを閉じます。

    上書きせずにファイルの行を追加する方法については、このページの下段に掲載しています。 テキストファイルの任意の行や任意の文字を編集する方法を知りたい方は、ファイルの内容を編集する方法をご覧ください。


    サンプルソースコード
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    class sample {
        public static void main(String args[]) {
    
            if ( args.length == 0 ) {
                System.out.println( "パラメータが未指定" );
                return;
            }
    
            // Fileクラスをインスタンス化
            File file = new File( args[0] );
    
            // ファイルが存在するかどうかを判定
            if ( !file.exists() ) {
                // ファイルが存在しない場合は処理終了
                System.out.println( "ファイルが存在しない" );
                return;
            }
    
            // 指定されたパスがファイルかどうかを判定
            if ( !file.isFile() ) {
                // ディレクトリを指定した場合は処理終了
                System.out.println( "ファイル以外を指定" );
                return;
            }
    
            // ファイルが書き込み可能かどうかを判定
            if ( !file.canWrite() ) {
                // ファイルが読み込み不可の場合は処理終了
                System.out.println("ファイルが読み込み不可");
                return;
            }
    
            try {
    
                // FileWriterクラスをインスタンス化
                FileWriter filewriter = new FileWriter(file);
    
                filewriter.write("1行目書き込み¥r¥n");
                filewriter.write("2行目書き込み¥r¥n");
                filewriter.write("3行目書き込み");
    
                // ファイルを閉じる
                filewriter.close();
    
            } catch ( IOException ex ) {
                 System.out.println( ex );
            }
        }
    }
    

    サンプルソースコードをコンパイルして、「sample.class」と同じフォルダに「test.txt」を作成します。 コマンドプロンプトで「java sample test」のようにパラメータを指定して実行すると、write()メソッドで指定した値が「test.txt」ファイルに書き込まれます。

    FileWriterクラスのwrite()メソッドを利用して改行を書き込みたい場合は、改行を表すコードを書き込みます。 改行を表すコードはOSによって異なるため注意して下さい。 Windowsの場合であれば「¥r¥n」を記述すると改行を書き込みます。 サンプルソースコードでも改行を書き込んでいますので、動作を確認してみてください。

    サンプルソースコードには、exists、isFile、canWriteなど様々なメソッドを記述しています。 各メソッドの動作についても確認してみてください。

    上のサンプルソースコードを実行するとファイルの内容が完全に上書きされます。 上書きせずにファイルの行を追加したい場合は、下のサンプルコードを実行してください。


  • 上書きせずにファイルの行を追加する場合は、FileWriterクラスをインスタンス化するときに、引数が2つのコンストラクタを利用します。 「new FileWriter(file, true)」と記述するだけで、上書きせずにファイルの行を追加することができます。 FileWriterコンストラクタの第2引数が true の場合、データはファイルの先頭ではなく最後に書き込まれます。


    サンプルソースコード
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    class sample {
        public static void main(String args[]) {
    
            if ( args.length == 0 ) {
                System.out.println( "パラメータが未指定" );
                return;
            }
    
            // Fileクラスをインスタンス化
            File file = new File( args[0] );
    
            // ファイルが存在するかどうかを判定
            if ( !file.exists() ) {
                // ファイルが存在しない場合は処理終了
                System.out.println( "ファイルが存在しない" );
                return;
            }
    
            // 指定されたパスがファイルかどうかを判定
            if ( !file.isFile() ) {
                // ディレクトリを指定した場合は処理終了
                System.out.println( "ファイル以外を指定" );
                return;
            }
    
            // ファイルが書き込み可能かどうかを判定
            if ( !file.canWrite() ) {
                // ファイルが読み込み不可の場合は処理終了
                System.out.println("ファイルが読み込み不可");
                return;
            }
    
            try {
    
                // FileWriterクラスをインスタンス化
                FileWriter filewriter = new FileWriter(file, true);
    
                filewriter.write("1行目書き込み\r\n");
                filewriter.write("2行目書き込み\r\n");
                filewriter.write("3行目書き込み\r\n");
    
                // ファイルを閉じる
                filewriter.close();
    
            } catch ( IOException ex ) {
                 System.out.println( ex );
            }
        }
    }
    
    

    サンプルソースコードをコンパイルして、「sample.class」と同じフォルダに「test.txt」を作成します。 コマンドプロンプトで「java sample test」のようにパラメータを指定して実行すると、write()メソッドで指定した値が「test.txt」ファイルに書き込まれます。 同じように続けて実行した後にファイルを開いてみると行が追加されていることを確認できます。 これは、システムのログファイル等でよくみられる編集方法です。

    上記を踏まえて、JavaのAPI「java.io.FileWriter」を確認してみてください。 きっと、FileWriterクラスの使い方を理解できるでしょう。



Javaプログラミング講座(応用編)
書籍の紹介
  • Java ポケットリファレンス
    Java ポケットリファレンス
    発売:2011/03/25
    定価:2,709円
    著者:高江 賢
    出版:技術評論社
    内容:ベーシックだけど忘れてしまいがちな情報をコンパクトなサイズに凝縮し、「逆引き形式で目的からすぐ探せる」「サンプルコードを見ながら具体的な実装のイメージがつかめる」特徴で現場に欠かせない1冊です。
  • フェイスブック 若き天才の野望 (5億人をつなぐソーシャルネットワークはこう生まれた)
    フェイスブック 若き天才の野望
    発売:2011/01/13
    定価:1,890円
    著者:デビッド・カークパトリック
    出版:日経BP社
    内容:ユーザー数が5億人を超え、会社の時価総額が2兆円を超え、グーグルを驚かす存在となった、フェイスブック。同社を率いるマスコミ嫌いのCEO、マーク・ザッカーバーグからの信頼を勝ち得たベテラン記者が、徹底取材からフェイスブックの真実を初めて明かします。
  • プログラマが知るべき97のこと
    プログラマが知るべき97のこと
    発売:2010/12/18
    定価:1,995円
    著者:和田 卓人
    出版:オライリージャパン
    内容:世界中で活躍するプログラマによる97本のエッセイを収録した書籍です。プログラミングにおいてもっとも重要な事柄は何か、バージョン管理やテスティング、設計原則とコーディングテクニック、また腕を磨くための勉強法などについて、経験豊かなプログラマが自らの体験を踏まえて解説します。
  • 明解Java 入門編
    明解Java 入門編
    発売:2007/08/08
    定価:2,730円
    著者:柴田 望洋
    出版:ソフトバンククリエイティブ
    内容:丁寧な解説と適切なサンプルプログラム248編と、豊富で分かりやすい図表278点で、Javaの基礎から学習できます。Javaプログラミング初心者におすすめの一冊です。
  • Effective Java 第2版 (The Java Series)
    Effective Java
    発売:2008/11/27
    定価:3,780円
    著者:Joshua Bloch他
    出版:ピアソンエデュケーション
    内容:著者のGoogle, Sun Microsystemsにおけるソフトウェア開発で得た知識・経験をまとめています。Javaプログラミングをする全てのSE必読の書籍です。
  • プログラミング言語Java (The Java Series)
    プログラミング言語Java
    発売:2007/04
    定価:4,410円
    著者:ケン・アーノルド他
    出版:ピアソンエデュケーション
    内容:Javaの原典と呼べる本です。変数、コメント、定数、制御、クラス、配列、文字列、例外処理までわずか30ページで進むので、Javaを学習し始めたばかりの方には少し難しいかもしれません。厚さの割に価格も手ごろなので、Java使いなら本棚に置いておきたい本です。
  • なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング
    なぜ、あなたはJavaでオブジェクト指向開発ができないのか
    発売:2004/12
    定価:2,289円
    著者:小森 裕介
    出版:技術評論社
    内容:Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。Javaのソフトウェア開発を中心に事業を発展させてきたSMG社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。
  • Webサイト制作・運営に役立つ! ホームページ担当者が最初に覚える100の基本
    Webサイト制作・運営に役立つ! ホームページ担当者が最初に覚える100の基本
    発売:2010/06/05
    定価:1,575円
    著者:服部 洋二
    出版:ソーテック社
    内容:初心者向けの書籍です。中小企業のWebサイトに携わる方向けの書籍ですので、個人のウェブサイトにも適用しやすい内容となっています。
  • もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら
    もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら
    発売:2009/12/04
    定価:1,680円
    著者:岩崎 夏海
    出版:ダイヤモンド社
    内容:ドラッカーとは、経営学者・社会学者であるピーター・ドラッカーのことです。突拍子のないことが書かれているので、息抜きに読んでみると面白いです。
  • CPUの創りかた
    CPUの創りかた
    発売:2003/10/01
    定価:2,940円
    著者:渡波 郁
    出版:毎日コミュニケーションズ
    内容:コンピューターの中核であるCPUの「超」基本原理から具体的な設計例までを解説。実際に作らない人も読み物としてタメになります。