• ベストアンサー
  • 困ってます

Javaでファイルの書き換え

  • 質問No.94481
  • 閲覧数1688
  • ありがとう数5
  • 回答数2

お礼率 69% (145/210)

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に変更すれば大丈夫だなぁ、とは思ったものの、もっと簡単な方法がありそうなので質問してみました。よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー
java.io パッケージの中に、RandomAccessFileクラスがあります。
CやC++でもありますが、ファイルのランダムアクセス用のクラスで、これを使えばファイル内の任意の位置にアクセスすることができます。

使い方はJavadocを読んでもらえれば分かると思いますが、
1.getFilePointer()で現在位置を取得
2.write()でファイルへの書き込み
3.seek()で書き込み後の位置のファイルポインタを移動する
というのが、簡単な流れになると思います。

ただし、ファイルポインタには先頭からのバイト数が格納されるので、改行などの不可視の文字コードなども考慮する必要があり、かなり使いづらいと思います。

ファイルの中身を全て探索し文字列を置換する今回のような場合には、ファイルから読み出した情報を置換しながら別名ファイルにコピーして元のファイル名に戻すのが一番簡単な方法だと思います。
お礼コメント
fuyu

お礼率 69% (145/210)

回答ありがとうございます。

「ファイルポインタには先頭からのバイト数が格納されるので、改行などの不可視の文字コードなども考慮する必要があり」
ということで、これは使いづらそうですねぇ。

お勧め通り、
「ファイルから読み出した情報を置換しながら別名ファイルにコピーして元のファイル名に戻す」という方法でやりたいと思います。ありがとうございました。
投稿日時:2001/06/24 22:30

その他の回答 (全1件)

  • 回答No.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("不正なファイル名です");
}
補足コメント
fuyu

お礼率 69% (145/210)

回答ありがとうございます。

すいません。書き間違いがありました。
「番号.名前.顧客の種別(A,B,Cで判別)を表しているファイルがあった時に」
ではなく、
「番号.名前.顧客の種別(A,B,Cで判別)を表しているデータがあった時に」
が正しいです。
このデータの書きかえをしたい、というのが今回の質問です。
投稿日時:2001/06/23 19:55
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ