2012-05-06 2 views
-1

나는이 파일의 텍스트의 라인 번호 3을 대체하기 위해 노력하고 있지만없는 적절한 라인을 업데이트 할 :파일의 라인을 교체

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); 

     } 
     } 
: 여기

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; 

내가 노력하고 코드입니다

+0

디버거와 그것을 통해 강화하면, 어떤 라인 3에서 일어난 :

여기에 단순위한 Apache commons-io를 사용하는 예입니까? –

답변

0

제 생각에 문제는 파일 포인터를 해당 줄의 끝으로 이동시키는 3 번째 줄을 먼저 읽어야한다는 것입니다. 그렇다면, raf.write(byt)을 할 때 선의 맨 위에 쓰는 것과 반대되는 선의 끝에 쓰십시오.

당신은 당신이 raf.position()를 사용하여, 3 라인을 읽기 시작하기 전에 위치를 기억하고 ... 쓰기 전에

raf.seek(oldPosition)을해야하지만, 난 정말 당신이이 방법을 수행하지 않는 것이 좋습니다. 편집기에서 텍스트를 약간 바꾸는 것과 같은 것은 아닙니다. replace 문자열은 대체되는 문자열과 정확히 같은 길이 여야합니다. 그렇지 않으면 파일에 가비지가 생깁니다. 대체 문자열이 더 길면 전체 파일을 처음부터 다시 쓰지 않고 선택할 수 있습니다.

모든 줄을 읽은 다음 세 번째 줄을 바꾸고 이전 파일의 전체 파일을 덮어 쓰는 것이 좋습니다. 구현하기가 쉽고 강력합니다.

List<String> lines = FileUtils.readLines(file); 
lines.set(2, "NO_OF_RECTGlE=100;"); 
FileUtils.writeLines(file, lines);