2011-04-13 41 views
0

任何人都可以請告訴我如何刪除目錄中的文件打開並加載到數據庫後?如何使用Java從目錄中刪除文件?

這裏是我的代碼:

public static void main(String[] args) throws SQLException{ 

     int Count= 0; 

     File directory = new File("C://Documents and Settings//welcome//My Documents//Bluetooth Exchange Folder"); 
     directory.deleteOnExit(); 
     File files[] = directory.listFiles(); 

     for(int index = 0; index < files.length; index++){ 

      try { 

       FileReader inp = new FileReader (files[index]); 
       BufferedReader buf = new BufferedReader(inp); 
       String strLine; 

       try { 
        while ((strLine = buf.readLine()) != null) 
        { 
         System.out.println(strLine); 

         String[] dbColumnValues = strLine.split("%"); 

         Connect.DoInsertIntoDB(Long.parseLong(dbColumnValues[0]),dbColumnValues[1],dbColumnValues[2], dbColumnValues[3]); 
         Count++; 
         System.out.println(Count + " Row(s) are inserted into the Database"); 
         GenHTML.gen(); 

        } 

       } 

但文件沒有在目錄中刪除。 請任何人都可以糾正我的代碼中的錯誤?

[目前,我正在測試目錄中的3個文件。之後的每個文件被加載到datbase,我希望每個文件來從目錄中刪除。]提前

謝謝!

回答

0

雙斜槓似乎有嫌疑。請使用單個反斜槓,您需要引用該反斜槓作爲\\,或使用單斜槓/

此外,您可以嘗試使用delete()時則方法返回而不是deleteOnExit()

+0

這應該是一個評論,而不是一個答案。 – 2011-04-13 19:05:48

+0

但實際上,文件中的數據正在被正確加載到數據庫中,這意味着目錄中的文件被識別。所以,我猜,斜線不是問題 – Anu 2011-04-13 19:09:49

0

按照API:當所述虛擬機終止此抽象路徑名錶示的文件或目錄被刪除

請求。

但是,在您的代碼中,您正在處理該函數,就好像它立即刪除該目錄一樣。

+0

是的,謝謝指出。 – Anu 2011-04-13 19:27:06

4

最好在代碼中明確。

File files[] = directory.listFiles(); 
for(int index = 0; index < files.length; index++){ 
{ 
    // Process files[index] 
    // ... 
    boolean wasDeleted = files[index].delete(); 
    if (!wasDeleted) 
    { 
    // Deal with error 
    } 
} 

此外,您還需要關閉的文件句柄當你與他們

FileReader inp = new FileReader (files[index]); 
try 
{ 
    // ... 
} 
finally 
{ 
    inp.close(); 
} 
+0

你應該關閉'BufferedReader',而不是'FileReader',因爲關閉前者最終會關閉兩者。 – mre 2011-04-13 19:22:17

+0

你說得對。我只是想表明原則。 – 2011-04-13 19:23:08

+0

是的!非常感謝!它確實有幫助。現在文件從目錄中刪除。 – Anu 2011-04-13 19:26:16

0

不能刪除目錄,除非它是空的完成。如果目錄不爲空,則必須先遞歸刪除目錄中的所有文件和子目錄。

因此directory.deleteOnExit()在你的情況下不起作用。

更多,我建議你直接刪除文件,而不是使用deleteOnExit()。如果與文件相關的所有輸入/輸出流不是已關閉,它將不會退出時刪除文件。始終關閉流並明確刪除文件,然後刪除目錄。

+0

是的,謝謝你的建議。現在它可以工作。 – Anu 2011-04-13 19:28:07

0

也許你需要做的是對打開文件的組件使用dispose()方法。可能的情況是,該文件仍然被打開並被一個已打開的組件鎖定,因此您必須確保使用dispose()方法來解決該問題。