2013-07-15 69 views
-1

Im的內容仍然在java中新並不能完全理解的BufferedReader和FileWriter的到底是如何工作等等一些這種被uploaded.This代碼必須刪除用戶想要的線但是而不是一條線..它刪除整個文件內容我刪除特定線功能刪除整個文件

   Scanner titlerem= new Scanner (System.in); 
       System.out.println("Enter student number:"); 
       title = titlerem.next(); 

       System.out.print("Are you sure you want to delete it [Y/N]?"); 
       String tString = titlerem.next(); 
       char temp2 = tString.charAt(0); 

    switch(temp2) 
    { 


    case('Y'): 
    { 

       // construct temporary file 
       File inputFile = new File("phonebook.txt"); 
       File tempFile = new File(inputFile + " "); 

       BufferedReader br = new BufferedReader (new FileReader("phonebook.txt")); 
       PrintWriter Pwr = new PrintWriter(new FileWriter (tempFile)); 
       String line = null; 


       while((line = br.readLine()) !=null) { 
        if(line.trim().startsWith(title)){ 
         continue; 
        } 
        else{ 
         Pwr.println(line); 
         Pwr.flush(); 
        } 
       } 

      // delete book file before renaming temp 
      inputFile.delete(); 

      // close readers and writers 
      Pwr.close();  
      br.close(); 


      // rename temp file back to books.txt 
      if(tempFile.renameTo(inputFile)){ 
       System.out.println("Deletion succesful"); 
      } 
      else 
      { 
      System.out.println("Update failed"); 
        } 
    }  



    case('N'): 
    { 
      System.out.print("Deletion did not proceed"); 
      break; 
    } 


     }    

任何人都可以幫助我。

+3

File.delete()將刪除整個文件,而不是線是偉大的。文檔中說的很多,你的代碼評論似乎反映了這種意圖。 http://docs.oracle.com/javase/7/docs/api/java/io/File.html#delete() – ardent

回答

2

我相信你的代碼是好的,只是你的switch案例陳述中沒有break。因此,即使該文件已正確創建並重命名,您仍將始終從第二個case語句中獲取可能誤導的消息,因爲它會顯示:刪除未繼續

首先檢查文件系統,如果內容被編輯爲它應該甚至沒有休息聲明。如果是,那麼只需添加一個break語句來糾正switch個案。

+1

而第一個'br.close()'然後'inputFile.delete()'。另外'startsWith(title +「」)'所以學生1不會刪除1,10,11,...,100,... –