使用java删除文件

时间:2013-02-15 10:37:20

标签: java file

在我的java应用程序中,我使用FilenameFilter来获取给定目录中的zip个文件。我的目录结构如下所示。

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

zip个文件位于dir个文件夹中。我只给D\\:\\MyFiles\\data我的程序,它使用dir找到以FilenameFilter开头的文件夹,然后在zip个文件夹中找到以dir结尾的文件。< / p>

for loop内,我为每个new File文件创建zip个对象,并调用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



    }
}           

2 个答案:

答案 0 :(得分:1)

阅读完更新后,我认为这里有两件事可能会发生。

  1. 您的应用程序中仍然有一些打开的东西。您不会使用FileInputStream或其他任何东西吗?

  2. 另一个过程是保持.zip忙碌。你打开那​​个文件了吗?尝试关闭资源管理器窗口或类似的东西。

  3. 编辑:来自其他用户的核对清单:

    • 检查您的路径是否正确,例如file.exists()返回什么?
    • 检查您是否有权以运行应用程序的用户身份删除文件
    • 检查您的代码中是否没有打开文件的句柄(例如,您是否只是从中读取而未关闭输入流?)
    • 检查您是否在桌面应用中打开了文件

答案 1 :(得分:0)

当您创建要测试的新File对象时,使用getPath时会有所不同。注意路径名中的所有斜杠都是\而不是/.