2013-02-15 136 views
0

在我的java應用程序中,我使用FilenameFilter在給定目錄中獲得zip文件。我的目錄結構如下所示。使用java刪除文件

D\:\MyFiles\data\dir1 
D\:\MyFiles\data\dir2 
D\:\MyFiles\data\dir3 
D\:\MyFiles\data\dir4 

zip文件在dir文件夾。我只給我的程序D\\:\\MyFiles\\data,它發現文件夾開始dir使用FilenameFilter,然後找到文件結尾dir文件夾zip

for loop裏面,我爲每個zip文件創建了new File個對象,並調用delete()來刪除它們,但它們不會被刪除。

我使用getPath()方法打印文件路徑;輸出如下所示。

D\:\MyFiles\data\dir1\a.zip 
D\:\MyFiles\data\dir1\b.zip 
D\:\MyFiles\data\dir2\b1.zip 
D\:\MyFiles\data\dir3\d.zip 

然後我手動創建一個File對象File f = new File("D/:/MyFiles/data/dir1/a.zip")並嘗試刪除。它成功了。

如何刪除文件?我怎樣才能給出正確的道路?

最新通報

這是我用的是什麼代碼:

// this contains folders start with 'dir' in 'D:\MyFiles\data\' 
    Vector<String> dirList = utl.identifyDir(conf); 

File dir; 
for (int i = 0; i < dirList.size(); i++) { 

// in my properties file ITEM_FOLDER is written as ITEM_FOLDER=D\:\\MyFiles\\data 
// LOG.fine(conf.readConfig(Configuration.ITEM_FOLDER)); returns D:\MyFiles\data 

    dir = new File(conf.readConfig(Configuration.ITEM_FOLDER) 
      + File.separator + dirList.get(i)); 

    // this contains all the files ends with 'zip' in 'dir' folders in 'D:\MyFiles\data\' 
    Vector<String> zipFiles = utl.identifyZipFiles(dir); 

    for (int x = 0; x < zipFiles.size(); x++) { 

     /* delete */ 

     File sourcePath = new File(
       conf.readConfig(Configuration.ITEM_FOLDER) 
         + File.separator + dirList.get(i) 
         + File.separator + zipFiles.get(x)); 

      boolean sp = sourcePath.delete(); 

      LOG.fine("sourcePath : " + sourcePath.getPath() + " : " 
        + sp); 

       // one of LOG prints is D:\MyFiles\data\dir3\d.zip : false 



    } 
}   
+0

它成功了嗎?所以它的工作?你試圖刪除文件是什麼?我也看到'D /:/ MyFiles',那不對。你沒有使用'D:/ MyFiles'? – Joetjah 2013-02-15 10:40:07

+0

嗯,路徑看起來像「D \:\ MyFiles ...」而不是「D:\ MyFiles ...」是否正確? – Dragon 2013-02-15 10:40:36

+0

你檢查delete()返回的內容嗎? – ellak 2013-02-15 10:40:41

回答

1

在閱讀您的更新後,我認爲這裏有兩件可能的事情發生。

  1. 你的應用程序中仍然有一些開放的東西。你不會碰巧使用FileInputStream或任何東西?

  2. 另一個過程是保持.zip繁忙。你打開那​​個文件了嗎?嘗試關閉瀏覽器窗口或類似的東西。

編輯:

  • 檢查您是否已經得到了正確的路徑,例如:來自其他用戶的清單file.exists()返回什麼?
  • 檢查您是否有權刪除該文件作爲運行您的應用程序的用戶
  • 檢查您的代碼中沒有打開文件的句柄(例如,您是否剛剛讀取並且未關閉輸入流?)
  • 檢查您沒有在桌面應用程序中打開該文件
+0

有一個'FileInputStream',我忘了關閉它,現在沒關係。 – Bishan 2013-02-18 04:38:08

0

當你創建一個新的文件對象進行測試,那麼當你使用getPath的東西是不同的。注意路徑名中的所有斜槓是\而不是/。

+0

我沒有使用'getPath'來創建File對象。只用於打印才能找到問題 – Bishan 2013-02-15 10:53:40

+1

然後發佈一些代碼for循環的外觀是什麼?每個人都只是在這裏猜測,因爲我們不知道它是怎麼樣的。 – Joetjah 2013-02-15 10:55:00

+0

是的,對不起。我會發布我的代碼 – Bishan 2013-02-15 10:55:44