1

txt ファイル内の文字列を検索し、その上に特定のコンテンツを挿入しようとしています。悲しいことに、出力は私が期待したものとはかなり異なって見えます。

誰かが私にヒントを与えることができますか?
ここまでたどり着きました!

    String description= "filename.txt";
    String comparison="    return model;";
    RandomAccessFile output = null;
        try
        {
          output = new RandomAccessFile(description, "rw" );
          String line = null;
          while ((line = output.readLine()) != null) {
                  if (line.equals(comparison)){
                      //System.out.println("alt: "+line);
                      output.seek(output.getFilePointer()-line.getBytes().length);
                      output.writeChars("new stuff; \n");
                      //System.out.println("new: "+output.readLine());
                      }
          }
        }
        catch ( IOException e ) {
          e.printStackTrace();
        }
        finally {        
          if ( output != null ){ try { output.close(); } catch ( IOException e ) { e.printStackTrace(); }}
        }

これは私が読もうとしているファイルです:

/*filename.txt*/
    some longer content ~ 100kB

    return model;

    further content 

そして、これが私が望んでいるものです

/*filename.txt*/
    some longer content ~ 100kB

    new stuff;

    return model;

    further content 
4

3 に答える 3

2

ファイルは、ファイルの末尾を除き、コンテンツの挿入または削除をサポートしていません。(Java の制限ではなく、OS の制限です)

テキストを挿入するには、ファイルを書き直す必要があります (少なくとも変更したいポイントから) .

于 2012-11-16T12:28:33.737 に答える
1

2 つのファイルを使用します。必要な行まで新しいファイルにコピーします。新しい行を追加します。次に、残りの行をファイルに再度コピーします。最後に、新しいファイルの内容全体を古いファイルにコピーします

于 2012-11-16T12:31:08.100 に答える
0

まず第一に、テストしている文字列に空白があります:

String comparison="    return model;";

次のように行を比較することをお勧めします。

if (line.trim().equals(comparison.trim())){ ...

への呼び出しtrim()は、行と比較文字列のすべての空白/タブを削除するため、一部のファイルが空白の代わりにタブを使用している場合、または空白の数が異なる場合にも一致します...

于 2012-11-16T12:30:18.887 に答える