-1
[12]
key1=val1
key2=val2
key3=val3
key4=val4
key5=val5
[13]
key1=val1
key2=val2
key3=val3
key4=val4
key5=xyz
[14]
key1=val1
key2=val2
key3=val3
key4=val4
key5=val5

key5=val5どこを更新したい[13]

 try {
         br = new BufferedReader(new FileReader(oldFileName));
         bw = new BufferedWriter(new FileWriter(tmpFileName));
         String line;
         while ((line = br.readLine()) != null) {
             System.out.println(line);

            if (line.contains("[13]"))
            {
                while (line.contains("key5")) {
                      if (line.contains("key5"))
                      {
                           line = line.replace("key5", "key5= Val5");
                           bw.write(line+"\n");
                      }

                }

            }

         }
      } catch (Exception e) {
         return;
      } finally {
         try {
            if(br != null)
               br.close();
         } catch (IOException e) {
            //
         }
         try {
            if(bw != null)
               bw.close();
         } catch (IOException e) {
            //
         }
      }
4

3 に答える 3

1

頭の中でロジックをステップ実行する必要があります。あなたのコードで:

if (line.contains("[13]")) {
    while (line.contains("key5")) {
        if (line.contains("key5")) {
            line = line.replace("key5", "key5= Val5");
            bw.write(line+"\n");
        }
    }
}

これを紙か何かに書いて、それに従ってみてください。while (line.contains("key5"))たとえば、ループを見てください。行に「[13]」が含まれている場合、「key5」は含まれておらず、ループは一度も実行されません。他にも多くの問題があります(コメントで別の人が言及したように、1行だけ書き戻そうとしている、またはループ内でそれ以上行を読んでいないなどの問題があります) )。これらの種類のことについては、何をしたいのかを正確に考えてから、それに合わせたコードを記述してください。次のことをしたいようです:

  1. 「[13]」という行を検索します。一度見つかったら...
  2. 「key5=」で始まる行を検索しますが、新しいセクション (「[」で始まる) が見つかったら停止します。それが見つかった場合:
  3. その行を "key5=" + 新しい値に置き換えます。

そして、置換しないで触れた行ごとに、それを書き戻す必要があります(ただし、ここでの一般的な式は、メモリの制約を除いて、解析/ロードしてから変更してから書き込むことです)。

したがって、コードでそれを行う必要があります。

また、一部の INI ファイル パーサーの実装 (これを INI ファイルとして扱っていると仮定) は、キーとセクション名の空白や大文字と小文字を無視するため、ファイルのソースによっては、それを考慮する必要がある場合もあります。

ところで、ファイルをロードしてキーを直接置き換えることができるini4jなどの INI ファイル処理ライブラリの使用を検討してください。Java で INI ファイルを解析する最も簡単な方法は何ですか? を参照してください。.

于 2013-10-28T09:42:00.483 に答える
0

この部分は間違っているように見えます:

while (line.contains("key5")) {
    if (line.contains("key5"))

ループ条件に NOT 演算子がないと仮定します

于 2013-10-28T09:40:29.627 に答える