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