2013-02-15 78 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