- ベストアンサー
Javaでファイルの書き換え
Javaでファイルの内容の書き換えをしようとしているのですが、これはどのようにすればよろしいのでしょうか? 今現在FileReaderを使ってのファイルの読み込み、PrintWriterを使ってのファイルの新規作成、書き込みができるのですが、ファイルの書き換えがどうしていいか分かりません。 例えば、a.txtというファイル名で ファイルの中身が 1.fuyu.A 2.haru.B 3.natsu.C 4.aki.B というように番号.名前.顧客の種別(A,B,Cで判別)を表しているファイルがあった時に、fuyuの種別をBに変更しようとしたらどのようにすればよいのでしょうか? PrintWriterを使って、一旦他のファイル名で変更したい部分を変更しながらコピーして、そのファイルをa.txtに変更すれば大丈夫だなぁ、とは思ったものの、もっと簡単な方法がありそうなので質問してみました。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
java.io パッケージの中に、RandomAccessFileクラスがあります。 CやC++でもありますが、ファイルのランダムアクセス用のクラスで、これを使えばファイル内の任意の位置にアクセスすることができます。 使い方はJavadocを読んでもらえれば分かると思いますが、 1.getFilePointer()で現在位置を取得 2.write()でファイルへの書き込み 3.seek()で書き込み後の位置のファイルポインタを移動する というのが、簡単な流れになると思います。 ただし、ファイルポインタには先頭からのバイト数が格納されるので、改行などの不可視の文字コードなども考慮する必要があり、かなり使いづらいと思います。 ファイルの中身を全て探索し文字列を置換する今回のような場合には、ファイルから読み出した情報を置換しながら別名ファイルにコピーして元のファイル名に戻すのが一番簡単な方法だと思います。
その他の回答 (1)
ファイルの書き換えと言うより、ファイル名の変更ですね? それでしたら、FileクラスのrenameTo()メソッドでできます。 try { File oldFile = new File("fuyu.A"); File newFile = new File("fuyu.B"); if(oldFile.renameTo(newFile) == true) { System.out.println("リネームしました。"); } else { System.out.println("リネームできませんでした。"); } } catch(SecurityException e) { System.err.println("セキュリティの制限により、リネームできません。"); } catch(NullPointerException e) { System.err.println("不正なファイル名です"); }
補足
回答ありがとうございます。 すいません。書き間違いがありました。 「番号.名前.顧客の種別(A,B,Cで判別)を表しているファイルがあった時に」 ではなく、 「番号.名前.顧客の種別(A,B,Cで判別)を表しているデータがあった時に」 が正しいです。 このデータの書きかえをしたい、というのが今回の質問です。
お礼
回答ありがとうございます。 「ファイルポインタには先頭からのバイト数が格納されるので、改行などの不可視の文字コードなども考慮する必要があり」 ということで、これは使いづらそうですねぇ。 お勧め通り、 「ファイルから読み出した情報を置換しながら別名ファイルにコピーして元のファイル名に戻す」という方法でやりたいと思います。ありがとうございました。