-1

このファイルのテキストの行番号 3 を置き換えようとしていますが、適切な行を更新できません。

 ENTITY test_labelOperation IS
generic (
    NO_OF_COLS  : integer := 640;// This is 3rd line and replace should be look like NO_OF_RECTGlE=100;
    NO_OF_ROWS  : integer := 480; 
    NO_BITS_CC  : integer := 10;
    DATA_WORD : integer :=8; 
    CODE_WIDTH :integer :=9
    );
END test_labelOperation;

これが私が試しているコードです:

  RandomAccessFile raf=new RandomAccessFile(absoluteFile,"rw");
  int lineCount=0;
  while(raf.read()!=-1) {
      String s=raf.readLine();
      //System.out.println(s);
      String stAry[];
      lineCount++;
      if (lineCount==3) {
         System.out.println(s);
         stAry=s.split("=",2);
         stAry[0]="NO_OF_RECTGlE";
         stary[1]=100+";";                        
         String str=Arrays.toString(stAry);
         byte []byt=str.getBytes();
         raf.write(byt);

         }
      }
4

1 に答える 1

0

私の推測では、最初に 3 行目を読み、ファイル ポインタをその行の END に移動するという事実に問題があると思います。そのraf.write(byt)ため、行の一番上ではなく、その行の最後まで書き込む必要があります。

raf.position()を使用して 3 行目を読み始める前に、その位置を覚えておく必要がありますraf.seek(oldPosition)

しかし、私はあなたがこのようにすることを本当にお勧めしません. エディターでテキストを少し置き換えるのとは異なります。置換文字列は、置換される文字列と正確に同じ長さである必要があります。そうしないと、ファイルにゴミが残ることになります。置換文字列が長い場合は、ファイル全体を最初から書き直すしかありません。

すべての行を単純に読み取り、3 行目を置き換えてから、ファイル全体を古いファイルの上に上書きすることを検討することを強くお勧めします。実装がより簡単になり、より堅牢になります。

簡単にするために、 Apache commons-ioを使用した例を次に示します。

List<String> lines = FileUtils.readLines(file);
lines.set(2, "NO_OF_RECTGlE=100;");
FileUtils.writeLines(file, lines);
于 2012-05-06T03:00:58.630 に答える