0

我陷入了一种奇怪的情况,即我正在文件夹中创建文件,但我需要确保在创建文件之前,如果文件夹中有任何文件,则必须仅删除当前文件过程应该在那里。

因为在我的应用程序中,每天都会运行一个作业,该作业会在该文件夹中创建文件,因此当当前作业正在运行时,它应该删除前一天的文件,并且文件夹中不应该有任何文件,但是下面显示的代码会在该文件夹中创建文件但问题是前一天的文件,或者如果作业在同一天多次运行,那么这些文件也在应该删除的文件夹中,请告知如何实现这一点..

File file = new File(FilePath + s); //path is c:\\abc folder & s is file name fgty.dat file         
if (file.exists()) {
  file.delete(); 
}
file.createNewFile();

请指教

4

4 回答 4

1

在您的位置,我会将目录移动到不同的名称,例如abc.OLD,重新创建它,然后创建您的文件。如果一切顺利,最后您可以删除 ols 目录。

如果您的程序的不同实例可以同时运行,您需要实现某种形式的同步。一种相当简单的方法可能是检查abc.OLD目录是否存在,如果存在则中止执行。

于 2013-08-30T15:21:02.000 回答
1

在没有看到更多代码的情况下,听起来您只需要在打开新文件之前清空文件夹,因为现在您只是删除了具有您要编写的确切名称的文件。使用list文件对象的方法。

File newFile = new File(FilePath + s);
for (File f : new File(FilePath).listFiles()) { // For each file in the directory, delete it.
    f.delete();
}
newFile.createNewFile();

请注意,如果您的文件夹包含其他非空目录,这将不起作用;您将需要一个更强大的解决方案。但是上面的代码至少会在创建新文件之前删除文件夹中的所有文件(显然排除异常)

如果,正如您在评论中提到的,您只想删除*.dat文件,那么就像在删除任何内容之前签入一样简单。

for (File f : new File(FilePath).listFiles()) { // For each file in the directory, delete it.
    if (f.getName().endsWith(".dat")) { // Only delete .dat files
        f.delete();
    }
}
于 2013-08-30T14:56:40.310 回答
0
File file = new File(FilePath+"test.txt");
File folder = new File(FilePath);
File[] listOfFiles = folder.listFiles();

for(int i = 0; i < listOfFiles.length; i++) {
    if (listOfFiles[i].isFile()) {
        System.out.println("File " + listOfFiles[i].getName());
        listOfFiles[i].delete();
    }
}
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
于 2013-08-30T15:31:19.843 回答
0

首先,我认为您实例化File对象的方式可能会遇到问题,因为如果您没有路径分隔符 ( \),您将尝试创建c:\abcfgty.dat而不是c:\abc\fgty.dat.

改用:

File file = new File(filePath, s);

然后您可以删除以“.dat”结尾的文件。据我了解,您不需要删除子目录。(是一个告诉您如何操作的链接。另请参见此处

for (File f : filePath.list()) { // For each file in the directory, delete it.
    if(f.isFile() && file.getName().toLowerCase().endsWith(".dat");){
        f.delete();
    }
}
try {
    file.createNewFile();
} catch (IOException ex) {
    //Please do something here, at leat ex.printStackTrace()
}

请注意,我们可以使用FileFilter来选择要删除的文件。

编辑

正如其他答案中所建议的那样,最好移动或重命名现有文件,而不是直接删除它们。

于 2013-08-30T15:42:21.090 回答