2012-11-16 4 views
1

나는 txt 파일 안의 문자열을 검색하고 그 위에 특정 내용을 삽입하려고합니다. 슬프게도 출력물이 내가 예상했던 것과 상당히 다른 것처럼 보입니다.

누군가 내게 힌트를 줄 수 있습니까?
이것은 내가 얻은 것입니다.
파일의 문자열을 검색하고 위에 내용을 삽입하십시오.

String description= "filename.txt"; 
    String comparison=" return model;"; 
    RandomAccessFile output = null; 
     try 
     { 
      output = new RandomAccessFile(description, "rw"); 
      String line = null; 
      while ((line = output.readLine()) != null) { 
        if (line.equals(comparison)){ 
         //System.out.println("alt: "+line); 
         output.seek(output.getFilePointer()-line.getBytes().length); 
         output.writeChars("new stuff; \n"); 
         //System.out.println("new: "+output.readLine()); 
         } 
      } 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     finally {   
      if (output != null){ try { output.close(); } catch (IOException e) { e.printStackTrace(); }} 
     } 

이 내가 읽으려고하는 파일입니다 :

/*filename.txt*/ 
    some longer content ~ 100kB 

    return model; 

    further content 

을이 나는 내용의 삽입 또는 삭제를 지원하지 않는

/*filename.txt*/ 
    some longer content ~ 100kB 

    new stuff; 

    return model; 

    further content 
+0

그리고 실제로 어떻게 되나요? – breezee

+0

이것은 당신이 가지고있는 것입니다. 그것이 당신이 기대하는 것입니다. 그러나 당신은 무엇을 얻고 있습니까? –

+0

두 개의 파일을 사용하십시오. 원하는 파일을 새로운 파일로 복사하십시오. 새 줄을 추가하십시오. 그런 다음 나머지 행을 파일로 다시 복사하십시오. 마지막으로 새 파일의 전체 내용을 이전 파일로 복사하십시오. –

답변

2

파일을 얻을 수 있도록 노력하겠습니다 것입니다 파일 끝에는 제외합니다. (Java의 제한은 아니지만 OS)

텍스트를 삽입하려면 변경하려는 지점부터 파일을 다시 작성해야합니다. 가장 간단한 해결책은 임시 파일에 내용을 복사하는 것입니다. 필요한 경우 변경/삽입 또는 삭제하고 이것이 성공하면 원본을 교체하십시오. 모든

+0

파일 크기가 상당히 커질 수 있으므로 복사본을 만드는 것을 피하려고합니다. – user1193134

+0

당신이 10 MB +에 대해서 이야기하지 않는다면 그 크기는 중요하지 않을 것입니다. 아무튼, 당신이 제안한 것을 할 수는 없습니다. –

+0

[http://www.java2s.com/Code/Java/File-Input-Output/Appendingdatatoexistingfile.htm]http://www.java2s.com/Code/Java/File-Input-Output/Appendingdatatoexistingfile.htm) 거기에서 파일은 ..... 그래서 가능하다 확대된다?! – user1193134

0

첫째 :

if (line.trim().equals(comparison.trim())){ ... 

호출 :이 같은 라인을 비교하는 더 좋은 생각이 될 것

String comparison=" return model;"; 

: 당신이 테스트하고 문자열에 공백이있다 trim()으로 변경하면 행 및 비교 문자열의 모든 공백/탭이 제거되므로 공백 대신 탭을 사용하거나 공백 대신 다른 탭을 사용하는 경우에도 일치합니다.

1

두 개의 파일을 사용하십시오. 원하는 파일을 새로운 파일로 복사하십시오. 새 줄을 추가하십시오. 그런 다음 나머지 행을 파일로 다시 복사하십시오. 마지막으로, 새 파일의 전체 내용을 이전 파일로 복사하십시오.

관련 문제