2012-07-26 62 views
0

我正在使用java.nio.*進行文件操作。基本上我的產品正在使用Java 7使用Java 7刪除文件

Files.createFile(path)//For creating file. 

服務器現在我創建服務器上的文件但是,當我想用​​

Files.delete(path) 

它給我留言刪除它

The process cannot access the file because it is being used by another process.** 

刪除文件代碼....

Files.walkFileTree(start, new SimpleFileVisitor<Path>() { 
      @Override 
      public FileVisitResult visitFile(Path file, 
        BasicFileAttributes attrs) throws IOException { 

       Files.delete(file); 
       return FileVisitResult.CONTINUE; 
      } 

      @Override 
      public FileVisitResult postVisitDirectory(Path dir, IOException e) 
        throws IOException { 
       if (e == null) { 
        Files.delete(dir); 
        return FileVisitResult.CONTINUE; 
       } else { 
        // directory iteration failed 
        throw e; 
       } 
      } 

     }); 
+0

[Java 7:Path vs File]的可能重複(http://stackoverflow.com/questions/6903335/java-7-path-vs-file) – 2012-07-26 13:11:42

+0

您可能在某處寫入文件後將其保持爲打開狀態在你的代碼中。請記住始終關閉文件/流/等。在你完成之後。 Java 7提供了一個稱爲'試用資源'的整潔機制,爲您提供幫助:http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 恐怕沒有什麼可以做的了說,除非你提供更多的信息。 – toniedzwiedz 2012-07-26 13:13:33

回答

4

您無法刪除已被您的進程或其他進程鎖定的文件。在Windows上,默認情況下文件被鎖定,在Linux上它們必須被明確地鎖定。

這個例子

Path path = FileSystems.getDefault().getPath("test.log"); 
Path file = Files.createFile(path); 
Files.delete(file); 

跑帶出錯誤

0

要刪除一個文件,你必須獲得該文件處理程序(通常通過創建它的線程擁有)。因此,如果一個線程創建了一個文件,另一個線程CAN NOT將其刪除。

確保在刪除文件時服務器沒有創建另一個線程,這是每個服務器代碼上發生的情況。

PS:如果你想要更多更好的答案,你將不得不提供更多信息

+0

這是我的代碼來刪除文件或目錄 – 2012-07-26 13:15:31

0

你關閉所有的作家使用的參考給定的文件?

0

如果您使用擺動組件打開文件,則可以使用該組件的dispose()方法打開文件。