2015-11-06 159 views
1

我試圖將數據從舊的文本文件轉移到新的文本文件。雖然下面的代碼能夠成功傳輸,但它不會刪除舊的文本文件。我可以知道這是爲什麼嗎?無法刪除使用刪除文本文件()

private void dataTransfer(String oldFilePath, String newFilePath) { 

     byte[] buffer = new byte[10000]; 
     try { 
      FileInputStream fileInput = new FileInputStream(oldFilePath); 
      BufferedInputStream bufferedInput = new BufferedInputStream(fileInput); 
      FileOutputStream fileOutput = new FileOutputStream(newFilePath); 
      BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput); 
      while(true) { 
       int length = fileInput.read(buffer); 
       if(length == -1) { 
        break; 
       } else { 
        bufferedOutput.write(buffer); 
        bufferedOutput.flush(); 
       } 
      } 
      fileInput.close(); 
      bufferedInput.close(); 
      fileOutput.close(); 
      bufferedOutput.close(); 
      File oldFile = new File(oldFilePath); 
      oldFile.delete(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.out.println(ERROR_TRANSFER_DATA); 
     } 

    } 
+0

放技術的問題標籤,調試代碼,並檢查它是否被刪除 – mikus

+0

嘗試檢查是否有權限刪除的文件或文件是否存在與否,或者你可以檢查文件是否被鎖定之前存在的文件一些其他的過程! –

+0

爲什麼你甚至可以複製該文件,如果你能[移動它(http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#move-java。 nio.file.Path-java.nio.file.Path-java.nio.file.CopyOption ...-)?另外爲什麼你沖洗輸出作家呢? '關閉'一次就可以完成,不需要手動完成。 – fabian

回答

0

對於刪除文件,它應該可以正常工作,但是對於刪除目錄,您必須確保目錄爲空。

0

更新的JRE和JDK,請確保您有該文件的權限。嘗試使用您創建的文件。

此外,添加一個catch塊拋出:SecurityException

+0

JRE和JDK版本在這裏沒有太多要做的事情(至少不太可能)。 'SecurityException'是'RuntimeException',你會看到它,如果它被拋出。 –

0

根據Oracle的文檔,刪除方法並不能保證它會刪除該文件。 http://docs.oracle.com/javase/7/docs/api/java/io/File.html#delete()

刪除一個文件,如果將失敗:

  • 文件不存在
  • 沒有在該文件上的鎖可能被其他進程打開
  • 文件不磁盤上存在
  • 您沒有足夠的權限刪除該文件(在這種情況下拋出SecurityException)
0

您可以使用下面的代碼塊。它的工作,雖然不知道。即使沒有setWritable,它的工作原理,

oldFile.setWritable(true); 
if(!oldFile.delete()){ 
    System.out.println("de;eted"); 
} 
0

我同意,你可能沒有足夠的權限來刪除文件@panagdu。

正如僥倖的FileInputStream

之前嘗試關閉bufferedStream像

bufferedInput.close(); 
fileInput.close(); 
bufferedOutput.close(); 
fileOutput.close(); 

但我不認爲這會有所幫助。

測試你與足夠的權限文件中的代碼。例如,Java不允許將delete()用於系統文件。