質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.54%

Javaで雛形ファイルをコピーして文字列置換したい

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,030

javabigineer

score 82

Javaで、雛形ファイルをコピーして、新たに作成したファイル内のテキストを
文字列置換する処理を作成したいです。
下記コードにより、ファイルコピーする処理はできています。

public static void fileCopy(String org, String copy){
          try {
                //Fileオブジェクトを生成する
                FileInputStream fis = new FileInputStream(org);
                FileOutputStream fos = new FileOutputStream(copy);

                //入力ファイルをそのまま出力ファイルに書き出す
                byte buf[] = new byte[256];
                int len;
                while ((len = fis.read(buf)) != -1) {
                    fos.write(buf, 0, len);
                }

                //終了処理
                fos.flush();
                fos.close();
                fis.close();

                System.out.println("コピーが完了しました。");

            } catch (IOException ex) {
                //例外時処理
                System.out.println("コピーに失敗しました。");
                ex.printStackTrace();
            }


上記処理により作成したファイル内の文字列を置換する処理の組み方を教えてほしいです
!!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

処理の組み方とのことなので。

現在FileInputStreamとFileOutputStreamで処理を行っていますが、これはバイト列での読み取り書き込みになります。
テキストファイルが前提なのであれば、文字列を読み込むクラスを使います。
読み込みには 
Scannerを使った方が楽ですかね。(BufferedReaderとInputStreamReaderを使う手もあります。)
それで1行ずつ読み込むことができます。

テキストを読み込むときには、charSet (文字エンコード)を正しく指定しないと文字化けしますので気を付けてください。これはScannerのインスタンス作成の時に指定できます。

1行ずつ読み込めたら、読み込んだ文字列に対して置換を実施します。

あとは置換された文字列を新しいファイルに書き込みます。
BufferedWriter、OutputStreamWriterをFileOutputStreamに組み合わせて書き込んでいきます。
書き込むときも文字コードが重要です。これは書き込んだ結果のテキストファイルがどの文字コードになるかにかかってきます。
charsetはOutputStreamWriterで指定します。

クラスがたくさん出てきましたが、基本の形は今とそれほどかわりません。
テキストを読む役割を持つクラスに置き換えていくイメージです。その途中で置換を行います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/28 15:58

    ありがとうございます。
    もしよければ、コードとかありませんか?
    文章読んでたら混乱してしまって。。

    キャンセル

  • 2016/08/28 16:08

    これぐらいの規模だと答えになってしまうので(ここは代わりにやってあげるサイトではありませんので)。
    クラス名で検索すればいろいろ出てくると思いますよ。
    まずはScannerで全行読むだけのコードを書いてみては。

    エラーが出たら質問に追記してくれれば、それは対応できると思います。

    キャンセル

0

文字列置換は、StringのreplaceAllを使えば実現できるでしょう。以下はテストコードです、

@Test
public void test() {
    String target = "これは置換する前の文字列です。処理が成功する前と変わったでしょうか";

    String replaced = target.replaceAll("する前", "した後");

    assertEquals("これは置換した後の文字列です。処理が成功した後と変わったでしょうか", replaced);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

質問の主旨(プログラミング方法を学びたい?)からずれるかもしれませんが、 Jakarta Velocity を使うのはどうでしょう。やりたいことによっては、自分で細々プログラミングするより拡張性に優れたものができます。

【Java】Javaテンプレートエンジン(Velocity)の基本的な使い方

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.54%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる