Google検索エンジン

トップページ » Javaプログラミング講座(応用編) » Javaプログラムでファイルの内容を編集・置換する方法


Javaプログラムでファイルの内容を編集・置換する方法

  • Javaプログラムでテキストファイルの行数を取得して任意の行を編集したり、テキストファイルから任意の文字列を検索して編集・置換したい場合は、テキストファイル全行を読み込む必要があります。 読み込んだ文字列をStringBufferを使用して連結します。 その時に文字列を検索して編集・置換・削除を行います。 最後にFileWriterクラスのwrite()メソッドを実行して連結した文字列をファイルに書き込みます。


    テキストファイルの任意の行を削除したい場合

    1.BufferedReaderクラスのreadLine()メソッドを実行して全行を読み込む。
    2.ファイルの行を読み込むときに、行数をカウントしておく。
    3.任意の行を読みとばしながら、StringBufferで全行を連結する。
    4.FileWriterクラスのwrite()メソッドを実行して連結した文字列をファイルに書き込む。


    テキストファイルの任意の行を編集したい場合

    1.BufferedReaderクラスのreadLine()メソッドを実行して全行を読み込む。
    2.ファイルの行を読み込むときに、行数をカウントしておく。
    3.任意の行ではindexOfやequalsで文字列を判定してから置換する。
    4.StringBufferを使用して全行の文字列を連結する。
    5.FileWriterクラスのwrite()メソッドを実行して連結した文字列をファイルに書き込む。


    テキストファイルから任意の文字列を検索して編集・置換したい場合

    1.BufferedReaderクラスのreadLine()メソッドを実行して全行を読み込む。
    2.StringBufferを使用して全行の文字列を連結する。
    3.連結した文字列にreplaceAll()メソッドを実行して全置換をかける。
    4.FileWriterクラスのwrite()メソッドを実行して置換後の文字列をファイルに書き込む。


    サンプルソースコード
    import java.io.File;
    import java.io.FileWriter;
    import java.io.FileReader;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    class sample {
    
        public static void main(String args[]) {
    
            if ( args.length == 0 ) {
                System.out.println( "パラメータが不足" );
                return;
            }
    
            String para1 = null;
            String para2 = null;
            String para3 = null;
    
            BufferedReader br 
                = new BufferedReader(new InputStreamReader(System.in));
    
            try{
                System.out.print("削除する行:");
                para1 = br.readLine();
                System.out.print("置換前の文字列:");
                para2 = br.readLine();
                System.out.print("置換後の文字列:");
                para3 = br.readLine();
            }catch(IOException ex){
                System.out.println("入力エラー:" + ex.getMessage());
            }
    
            // Fileクラスをインスタンス化
            File file = new File( args[0] );
    
            // ファイルが存在するかどうかを判定
            if ( !file.exists() ) {
                // ファイルが存在しない場合は処理終了
                System.out.println( "ファイルが存在しない" );
                return;
            }
    
            // 指定されたパスがファイルかどうかを判定
            if ( !file.isFile() ) {
                // ディレクトリを指定した場合は処理終了
                System.out.println( "ファイル以外を指定" );
                return;
            }
    
            // ファイルが読み込み可能かどうかを判定
            if ( !file.canRead() ) {
                // ファイルが読み込み不可の場合は処理終了
                System.out.println("ファイルが読み込み不可");
                return;
            }
    
            // ファイルが書き込み可能かどうかを判定
            if ( !file.canWrite() ) {
                // ファイルが読み込み不可の場合は処理終了
                System.out.println("ファイルが読み込み不可");
                return;
            }
    
            int gyo = Integer.parseInt( para1 );
    
            String readText = fileRead( file, gyo );
    
            String replaceText = readText.replaceAll(para2, para3);
    
            fileWrite( file, replaceText );
    
        }
    
        private static String fileRead(File _file, int _gyo) {
    
            StringBuffer fileRead = new StringBuffer("");
    
            try {
    
                // FileReaderクラスをインスタンス化
                FileReader fr = new FileReader( _file );
    
                // BufferedReaderクラスをインスタンス化
                BufferedReader br = new BufferedReader( fr );
    
                String str = null;
    
                int count = 1;
    
                while ( ( str = br.readLine() ) != null ) {
    
                    if ( count != _gyo) {
                        fileRead.append(str + "\r\n");
                    } else {
                        System.out.println( str+":を削除" );
                    }
                    count++;
                }
    
                // ファイルを閉じる
                br.close();
    
            } catch ( FileNotFoundException ex ) {
                 System.out.println( ex );
            } catch ( IOException ex ) {
                 System.out.println( ex );
            }
            return fileRead.toString();
        }
    
        private static void fileWrite(File _file, String _text){
    
            try {
    
                // FileWriterクラスをインスタンス化
                FileWriter filewriter = new FileWriter( _file );
    
                filewriter.write( _text );
    
                // ファイルを閉じる
                filewriter.close();
    
            } catch ( IOException ex ) {
                 System.out.println( ex );
            }
        }
    }
    

    サンプルソースコードをコンパイルして、「sample.class」と同じフォルダに「test.txt」を作成します。 作成した「test.txt」の内容を編集します。 コマンドプロンプトで「java sample test」のようにパラメータを指定して実行します。 「削除する行」と「置換前の文字列」と「置換後の文字列」を入力するとファイルが編集されます。 置換前の文字列がファイルにない場合は、ファイルの内容に変化はありません。 また、行を削除したくない場合は、「0」を指定すれば行は削除されません。

    掲載しているサンプルソースコードはあくまでもプログラミングの一例です。 もっと効率的な方法があると思いますので、自分で考えてみてください。 自分で考えることができれば、プログラミングの幅が広がると思います。



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言語を教えてきた実績をフィードバックしています。
  • HTML/XHTML&スタイルシートレッスンブック―ステップバイステップ形式でマスターできる
    HTML/XHTML&スタイルシートレッスンブック
    発売:2007/06/20
    定価:2,604円
    著者:エビスコム
    出版:ソシム
    内容:初心者の方におすすめしたい参考書籍です。 HTMLやCSSに関しても基礎的なことを、丁寧にとても分かりやすく説明しています。 Webページを作成する過程が、段階的に解説されているため、無理なくHTMLとCSSを習得できます。
  • Webサイト制作・運営に役立つ! ホームページ担当者が最初に覚える100の基本
    Webサイト制作・運営に役立つ! ホームページ担当者が最初に覚える100の基本
    発売:2010/06/05
    定価:1,575円
    著者:服部 洋二
    出版:ソーテック社
    内容:初心者向けの書籍です。中小企業のWebサイトに携わる方向けの書籍ですので、個人のウェブサイトにも適用しやすい内容となっています。
  • もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら
    もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら
    発売:2009/12/04
    定価:1,680円
    著者:岩崎 夏海
    出版:ダイヤモンド社
    内容:ドラッカーとは、経営学者・社会学者であるピーター・ドラッカーのことです。突拍子のないことが書かれているので、息抜きに読んでみると面白いです。
  • CPUの創りかた
    CPUの創りかた
    発売:2003/10/01
    定価:2,940円
    著者:渡波 郁
    出版:毎日コミュニケーションズ
    内容:コンピューターの中核であるCPUの「超」基本原理から具体的な設計例までを解説。実際に作らない人も読み物としてタメになります。