2017-03-23 2 views
1

몇 개의 문자열이 포함 된 파일이 있습니다. 예를 들어 :Java에서 텍스트 파일의 마지막 줄을 제거하려면 어떻게합니까?

Mike1111
내가 그 파일에서 줄을 삭제하는 코드를 작성하는 것을 시도하고있다

Chris2222
Brian3333. 내가 예를 들어 크리스를 삭제할 때, 그것은된다 :

Mike1111
Brian3333
내가 다른 문자열을 추가 할 때 오히려 빈 줄 뒤에 올 것이다 때문에 빈 줄이 문제가

(빈 줄) 그 자리보다. 미리 감사드립니다. 여기 내 코드는 다음과 같습니다.

public void deleteUser(String u, String p) throws IOException { 
    username = u; 
    pin = p; 

    File userAccountFolder = new File("userLogin.txt"); 
    File temporaryFile = new File("temporaryFile.txt"); 

    BufferedReader buffReader = new BufferedReader(new FileReader(userAccountFolder)); 
    BufferedWriter buffWriter = new BufferedWriter(new FileWriter(temporaryFile)); 

    String lineToRemoveFromFile = username + pin; 
    String lineFromUserFile; 

    while ((lineFromUserFile = buffReader.readLine()) != null) { 

     String trimmedLine = lineFromUserFile.trim(); 
     if (trimmedLine.equals(lineToRemoveFromFile)) { 
      continue; 
     } 

     buffWriter.append(lineFromUserFile + System.getProperty("line.separator")); 
    } 
    buffWriter.close(); 
    buffReader.close(); 

    boolean removed = temporaryFile.renameTo(userAccountFolder); 
    if (removed == true) { 
     System.out.println(username + "'s account has been removed."); 

    } 

} 
+0

을 내가 삭제라고 말하면 코드에서 볼 수 있듯이 쓰여진 새 파일에 포함되지 않는다는 의미입니다. – RLN007

+1

제목을 변경하십시오 –

답변

0

이것은 하나의 부울 검사를 추가 할 것입니다.

 BufferedReader buffReader = new BufferedReader(new FileReader(userAccountFolder)); 
     BufferedWriter buffWriter = new BufferedWriter(new FileWriter(temporaryFile)); 

     String lineToRemoveFromFile = username + pin; 
     String lineFromUserFile; 

     boolean addnewLine = false; 

     while ((lineFromUserFile = buffReader.readLine()) != null) { 

      String trimmedLine = lineFromUserFile.trim(); 
      if (trimmedLine.equals(lineToRemoveFromFile)) { 
       continue; 
      } 

      if (addnewLine) { 
       buffWriter.newLine(); 
      } else { 
       addnewLine = true; 
      } 
      buffWriter.append(lineFromUserFile); 

     } 
     buffWriter.close(); 
     buffReader.close(); 
+1

거대한 파일의 경우 어떻게 작동합니까? –

0

여기서 문제는 System.getProperty("line.separator"), 당신은 온도 더 이상 선 불구하고 temporaryFile의 끝에 행을 추가하고, 그 코드는 다음과 중복 엔드 라인을 만드는 피하기 위해 시도합니다. 또한

String lineFromUserFile = null; 
    boolean needAddNewLine = false; 
    while ((lineFromUserFile = buffReader.readLine()) != null) { 
     if (!lineFromUserFile.trim().equals(lineToRemoveFromFile)) { 
      if (needAddNewLine) { 
       buffWriter.newLine(); 
      } 
      needAddNewLine = true; 
      buffWriter.write(lineFromUserFile); 
     } 
    } 
관련 문제