-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)写到那行的末尾,而不是在行的顶部。

在开始阅读第 3 行之前,您需要记住位置,使用raf.position(),然后raf.seek(oldPosition)在写入之前执行...

但我真的不建议你这样做。这与在编辑器中替换一些文本不同。替换字符串的长度必须与被替换字符串的长度完全相同,否则文件中会出现垃圾。如果替换字符串更长,那么您将别无选择,只能从头开始重写整个文件。

我强烈建议您考虑简单地阅读所有行,替换第三行,然后在旧文件的顶部覆盖整个文件。它会更容易实现,也更健壮。

为简单起见,这是一个使用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 回答