人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaで、テキストファイルの指定した行を修正するプログラムを考えてるのですが分かりません。
どなたかご教授くださいませ。
具体的には、下記の内容のテキストファイルがあったとし、
1行目 あいうえお,かきくけこ
2行目 さしすせそ,たちつてと
3行目 なにぬねの,はひふへほ
・修正するメソッドに「まみむめも,やゆよ」を渡し、
結果
1行目 あいうえお,かきくけこ
2行目 まみむめも,やゆよ
3行目 なにぬねの,はひふへほ
となる。

●質問者: ピ
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Java あいうえお さしすせそ テキスト ファイル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● velsel
●20ポイント

プログラミングの性質上、一度テキストファイルを全て読み込み、編集し、その後にテキストに全て書き出すという流れが必須です

下記ページの文言丸ごとではありませんが、どこまでがわからないのかがわからないのでここまでしか助言することができません

1. FileStreamのコンストラクタなどで、ファイルを開く。

2. StreamReader.ReadToEnd()ですべてStringへ読み込む。

3. そのStringで検索、置換をかける。

4. そのStringを、StreamWrite([String])で一気に書き込む。

5. Flush()して、ファイルを閉じる。

http://dobon.net/vb/bbs/log3-12/6804.html


もう少し具体的な、修正の性質や処理内容(検索・固定行列)などを挙げていただかなければなんともいえません


参考までに

http://www.javadrive.jp/start/stream/index.html


2 ● lizy
●70ポイント ベストアンサー

入力ファイルを1行ずつ読み込んで、修正対象行なら修正内容を出力、それ以外は入力ファイルの内容をそのまま出力するのが良いかと思います。

指定された行番号に対応する行の内容を置き換えるのであれば、こんな感じになります:

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) throws IOException {

BufferedReader br = null;

PrintWriter pw = null;

LineNumberReader lnr = null;

try {

br = new BufferedReader(new FileReader(path));

lnr = new LineNumberReader(br);

pw = new PrintWriter(new BufferedWriter(new FileWriter(path)));

replace(lnr, pw, 2, "まみむめも,やゆよ");

} catch(Exception e) {

e.printStackTrace();

} finally{

try{

if(pw != null){

pw.close();

}

if(lnr != null) {

lnr.close();

}

}catch(Exception n){

}

}

}

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);

}

}

}


3 ● MarimoKoke
●20ポイント

こんな感じかな?

>|Java|

private void hoge(int line, String str) {

try{

File file = new File("test.txt");

BufferedReader br = new BufferedReader(new FileReader(file));

ArrayList<String> strArr = new ArrayList<String>();

String s;

while((s = br.readLine()) != null) strArr.add(s);

br.close();

BufferedWriter bw = new BufferedWriter(new FileWriter(file));

for (int i = 0; i < strArr.size(); i++) {

if (i == line-1) bw.write(str + "\n");

else bw.write(strArr.get(i) + "\n");

}

bw.close();

}catch(Exception e){

System.out.println("ファイル読み込み失敗");

}

}

||<

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ