替换文件中的一行

时间:2012-05-06 01:51:39

标签: java file

我正在尝试替换此文件中的第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);

         }
      }

1 个答案:

答案 0 :(得分: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);