2013-12-14 48 views
0

這裏是我的代碼,用於從文件中刪除字符串。 該代碼從生成的臨時文件中刪除字符串 - 但不要將原始文件替換爲編輯的臨時文件。從文本文件中刪除字符串

原始文件保持原樣。編輯發生在臨時文件,它不重命名爲原始文件

try{ 
    File inFile = new File("ext.txt"); 

    if (!inFile.isFile()) { 
    System.out.println("Parameter is not an existing file"); 
    return; 
    } 

    File tempFile = new File(inFile.getAbsolutePath()+".txt"); 

    BufferedReader br = new BufferedReader(new FileReader(inFile)); 
    PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); 

    String line = null; 

    while ((line = br.readLine()) != null) { 

    if (!line.trim().equals(mystring)) { 

     pw.println(line); 
     pw.flush(); 
    } 

    } 

    pw.close(); 
    br.close(); 
    inFile.delete(); 
    tempFile.renameTo(inFile); 

    if (!inFile.delete()) { 
    System.out.println("Could not delete file"); 
    return; 
    } 

    if (!tempFile.renameTo(inFile)) 
    System.out.println("Could not rename file"); 

} 
catch (FileNotFoundException ex) { 
    ex.printStackTrace(); 
} 
catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+4

而你的問題是? – home

+0

plz閱讀最後一行。該代碼不會用編輯過的文件替換原始文件。 – user3078848

+0

原始文件保持原樣。編輯發生在臨時文件中,並且它不會重命名爲原始文件 – user3078848

回答

0

您的代碼運行得很好。您需要存儲布爾值file.delete和file.rename,並在「if」條件中使用這些值。這個缺陷是,你試圖刪除並重命名已經被重命名和刪除的同一個文件,所以它會失敗if條件。嘗試做這樣的事情:

 boolean isDeleted = inFile.delete(); 
     boolean isRenamed = tempFile.renameTo(inFile); 

     if (!isDeleted) { 
     System.out.println("Could not delete file"); 
     return; 
     } 

     if (!isRenamed) 
     System.out.println("Could not rename file");