Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(特定の行への書き込みをしたい。)
閲覧数:820
掲示板(特定の行への書き込みをしたい。)
名前
匿名
題名 特定の行への書き込みをしたい。
質問内容

質問を評価する
(0ポイント)
Java初心者です。教えてください!

特定の行への書き込みを行いたいのですが、
以下のようにソースコードを書いたら、
test.txtの中身が全て消えてしまいました。

何故消えてしまったのでしょうか。
また、そうならないようにするにはどうすればいいのでしょうか。

誰か回答をお願いします!!


[ソース]
import java.io.*;

public class Filewriter {

    // 特定の行に書き込みをする。
    public static void replace(LineNumberReader in, PrintWriter 
out, int lineNumber,
            String s) throws IOException {

        String line;
        while ((line = in.readLine()) != null) {
            if (in.getLineNumber() == lineNumber) {
                out.println(s);
            } else {
                out.println(line);
            }
        }
    }

    public static void main(String args[]) {

        try {
            File f = new File("src/gamers/test.txt");
            BufferedReader b = new BufferedReader(new 
FileReader(f));
            LineNumberReader lnr = new 
LineNumberReader(b);
            PrintWriter pw = new PrintWriter(f);
            
            replace(lnr, pw, 4, "1 2 3 4 5 6 7 8 9 0");
            
            pw.close();
            lnr.close();
            b.close();
            
        } catch (Exception e) {
            System.out.println(e);
        }

    }
}
質問日時 2013-01-29 13:50:41
名前
匿名
回答内容

回答を評価する
(0ポイント)
どのタイミングでファイルの中身が消えるかを追ってみてはいかがですか?
あと、提示できる情報は可能な限り提示するとよいですよ。開発環境とか。
回答日時 2013-01-29 14:49:47
名前
匿名
回答内容

回答を評価する
(0ポイント)
関数replaceに入った時点で内容がもう消えていました。
おそらく、writerに入った時点で消えたものかと。

replaceの中では、
もし、修正したい行であれば、その行を入れたい文字でまるごと更新す
る。
そうでなければ、読み込んだのをそのままwriteするという関数にしたつ
もりなのですが・・・。


開発環境は、Java1.6でeclipse4.2を使っています。
回答日時 2013-01-29 18:10:08
名前
匿名
回答内容

回答を評価する
(30ポイント)
ランダムアクセスじゃないんだから同じファイルへ書き出せ
るわけが。

1.一時ファイルへ出力し、元のファイルを削除、一時ファイ
ルを元ファイルへリネームする。
サイズが分からんならこうするのが無難。
2.小さいファイルなら全件読んでクローズ、書き換えた後に
全件出力。
回答日時 2013-01-29 18:57:04
名前
匿名
回答内容

回答を評価する
(0ポイント)
ありがとうございます!!

test.txtの内容を読み込んで、test2.txtというのを新たに作って、その内
容を書き込ませて、renameで戻したら、行けました!!

本当にありがとうございました。
回答日時 2013-01-29 22:02:57
名前
匿名
回答内容

回答を評価する
(0ポイント)
うまいことやろうとしてうまく行かず、ベタやり方にしたと
いうこと。
でも、良いこと言って結局できないより、泥臭くても結果を
残せた方がいい。

逆に、もっといいやり方が確立してるのに泥臭いやり方にこ
だわってうまく行かないケースもある。
何かにこだわるとちゃんと結果を残せなくなるかもしれな
い。

とは言っても、仕事でやるようになると、やり方は上から押
し付けられることが多いんだけど。
回答日時 2013-01-30 08:55:19

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道