2015-04-22 62 views
-1

我試圖根據用戶輸入刪除一行。 MYFILE.TXT樣子:當從文件中刪除數據時,臨時文件將不會重命名爲原始文件

Matt 
Brian 
John 

然而,當我進入「布萊恩」(刪除這條線),它是在臨時文件(myTempFile.txt)刪除,但不能更名回原來的文件(MYFILE )。爲什麼是這樣?謝謝

import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.util.Scanner; 

    public class testcode { 

     public static void main(String[] args) throws IOException { 
      File inputFile = new File("myFile.txt"); 
      File tempFile = new File("myTempFile.txt"); 
      Scanner myScan = new Scanner(System.in); 

      BufferedReader reader = new BufferedReader(new FileReader(inputFile)); 
      BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); 

      System.out.print("Please enter student first name: "); 
      String lineToRemove = myScan.nextLine(); 
      String currentLine; 

      while((currentLine = reader.readLine()) != null) 
      { 
       String trimmedLine = currentLine.trim(); 
       if(!trimmedLine.contains(lineToRemove)) { 
        writer.write(trimmedLine); 
        writer.newLine(); 
       } 
       tempFile.renameTo(inputFile); 
      } 
      writer.close(); 
      reader.close(); 
      myScan.close(); 

     } 
    } 
+0

任何人都可以幫忙嗎? – Adam

回答

2

您的原始文件已打開,這就是爲什麼它不起作用。

我建議經過一段時間後再做renameTo(...),然後把它放在reader.close();之前。在原始文件的每個readLine()處重命名它是沒有意義的。執行處理,然後重命名臨時文件。

像:

while((currentLine = reader.readLine()) != null) 
    { 
     String trimmedLine = currentLine.trim(); 
     if(!trimmedLine.contains(lineToRemove)) { 
      writer.write(trimmedLine); 
      writer.newLine(); 
     } 

    }    
    reader.close(); 
    writer.close(); 
    inputFile.delete(); //Added to my original post. 
    tempFile.renameTo(inputFile); 

看到的例子:http://www.tutorialspoint.com/java/io/file_renameto.htm

經過一番研究,我看到了這一點:http://www.coderanch.com/t/595269/java-io/java/doesn-File-renameTo-work。如果該文件確實存在,則重命名將不起作用。嘗試在重命名之前刪除inputFile。

+0

不幸的是,我在發佈之前嘗試過。還是一樣的問題 – Adam

+0

試試也writer.flush();或者可能是inputFile.close();或FileReader fileReader = new FileReader(inputFile);然後fileReader.close();這是因爲這些文件沒有被髮布,這就是爲什麼。 – JFPicard

+0

這些建議都無效。當嘗試讀取文件位時,我收到一條消息:方法readLine()對於類型FileReader – Adam