2012-09-29 3 views
2

내 말은 안드로이드의 텍스트에서 줄을 지우고 싶습니다. 어떻게 삭제합니까? 하나의 txt를 읽고 선을 제거하면서 다른 것을 만들고 싶지 않습니다. 기존 txt에서 줄을 지우고 싶습니다. 덕분에 .txt에서 줄을 어떻게 지울 수 있습니까?

+0

첫 줄? 마지막 줄? 중간 선? 예 : – Simon

+0

21.line –

+0

샘플을 보내시겠습니까? –

답변

5

사소한 문제에도 불구하고 꽤 까다로운 문제입니다. 가변 길이의 라인의 경우, 아마도 유일한 옵션은 파일을 라인 단위로 읽고 목표 라인의 offsetlength을 식별하는 것입니다. 그런 다음 파일의 다음 부분을 offset에서 복사하여 파일 길이를 원래 크기에서 대상 라인의 길이를 뺀 값으로 자릅니다. RandomAccessFile을 사용하여 내부 포인터에 액세스하고 행별로 읽을 수도 있습니다.

이 프로그램은 두 개의 명령 라인 인수 필요

  • args[0]
  • args[1] 대상 행 번호 파일명이다 (1 기 : 첫 번째 줄 # 1)
public class RemoveLine { 
    public static void main(String[] args) throws IOException { 
     // Use a random access file 
     RandomAccessFile file = new RandomAccessFile(args[0], "rw"); 
     int counter = 0, target = Integer.parseInt(args[1]); 
     long offset = 0, length = 0; 

     while (file.readLine() != null) { 
      counter++; 
      if (counter == target) 
       break; // Found target line's offset 
      offset = file.getFilePointer(); 
     } 

     length = file.getFilePointer() - offset; 

     if (target > counter) { 
      file.close(); 
      throw new IOException("No such line!"); 
     } 

     byte[] buffer = new byte[4096]; 
     int read = -1; // will store byte reads from file.read() 
     while ((read = file.read(buffer)) > -1){ 
      file.seek(file.getFilePointer() - read - length); 
      file.write(buffer, 0, read); 
      file.seek(file.getFilePointer() + length); 
     } 
     file.setLength(file.length() - length); //truncate by length 
     file.close(); 
    } 
} 

Here is the full code (JUnit 테스트 케이스 포함). 이 솔루션을 사용할 때의 이점은 고정 버퍼를 사용하므로 메모리 요구 사항을 예측할 수 있고 입력 파일 크기에 따라 변경되지 않기 때문에 메모리와 관련하여 완전히 확장 가능해야한다는 것입니다.

3

대체 할 파일을 String 버퍼에 저장 한 다음 대체하여 파일 내용 전체를 바꿉니다.

+0

샘플 pls 줄? –

+0

제안 해 주셔서 감사합니다. –

0

파일의 나머지 데이터를 복사 한 다음 파일을 비우고 마지막으로 복사 한 데이터를 복사하여 줄을 삭제할 수 있습니다. 다음 코드는 삭제할 문자열을 검색하고 stringBuider에 복사 할 코드를 건너 뜁니다. . 플러시 후 stringBuilder의 내용이 동일한 파일에 복사됩니다.

  try { 
       InputStream inputStream = openFileInput(FILENAME); 
       FileOutputStream fos = openFileOutput("temp", Context.MODE_APPEND); 

       if (inputStream != null) { 
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
        String receiveString = ""; 
        String deleteString = "<string you want to del>"; 
        StringBuilder stringBuilder = new StringBuilder(); 

        while ((receiveString = bufferedReader.readLine()) != null) { 
         if (!reciveString.equals(deleteline)) { 
          stringBuilder.append(receiveString); 
         } 
        } 
        fos.flush(); 

        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
        fos.write(stringBuilder.toString().getBytes()); 
        fos.close(); 
        inputStream.close(); 
        } 
관련 문제