创建日期不会在删除文件时更改,然后创建文件

时间:2014-01-02 13:53:42

标签: java file

由于某些原因我必须根据我们的客户端删除旧文件并创建新文件

修改日期是更改为当前时间,但创建日期不会更改为当前时间。

enter image description here 我的代码如下

  public static void main(String args[]) throws Exception {
    FileUtils.deleteQuietly(new File("d:\\inbox\\json\\test.txt"));
    FileWriter fileWriter = new FileWriter("d:\\inbox\\json\\test.txt", false);
    fileWriter.append(new Date().toString());
    fileWriter.close();
  }

此代码删除旧数据并写入新数据

但为什么日期创建时间不会改变..

请帮我弄清楚我的代码有什么问题。 提前谢谢。

8 个答案:

答案 0 :(得分:3)

这是一个NTFS问题。系统正在缓存文件信息,在重新创建文件时重复使用它。

请参阅http://msdn.microsoft.com/en-us/library/system.io.file.getcreationtime%28v=vs.110%29.aspx

中的备注部分
  

NTFS格式的驱动器可能会在短时间内缓存有关文件的信息,例如文件创建时间。因此,如果要覆盖或替换现有文件,可能需要显式设置文件的创建时间。

问候。

PS:你可以使用这些命令来查看它没有使用Java代码:

del test.txt

echo test > test.txt

dir /TC test.txt

答案 1 :(得分:3)

由于Windows中的文件系统隧道,这种情况正在发生。有禁用/配置它的选项。您可以通过此链接support.microsoft.com获取有关此内容的更多信息。

Innorder以java方式抵消此问题,您可以在创建文件后立即设置文件创建时间(文件属性),如下面的代码所示。

public static void main(String args[]) throws Exception {
        final String FILE_PATH = "d:\\test.txt";
        FileUtils.deleteQuietly(new File(FILE_PATH));
        FileWriter fileWriter = new FileWriter(FILE_PATH, false);
        fileWriter.append(new Date().toString());
        fileWriter.close();
        setFileCreationTime(FILE_PATH);

    }

    public static void setFileCreationTime(String filePath) throws IOException {
        Path path = Paths.get(filePath);
        FileTime fileTime = FileTime.fromMillis(System.currentTimeMillis());
        /* Changing the Created Time Stamp */
        Files.setAttribute(path, "basic:creationTime", fileTime,
                LinkOption.NOFOLLOW_LINKS);
    }

希望这有帮助。

答案 2 :(得分:0)

在写入文件之前,您不会删除该文件。

答案 3 :(得分:0)

如果在重新创建文件之前没有删除该文件,则只修改它。

答案 4 :(得分:0)

您要附加到在给定日期创建的文件,这不会创建新文件(这将为您提供创建日期)。您要做的是将原始文件的内容复制到某个内容(例如数组),然后删除该文件,然后编写一个包含所有原始内容以及您要添加的内容的新文件。

虽然您的描述暗示这不是您希望此代码执行的操作,但您的描述暗示您要删除旧文件并仅包含新内容,在这种情况下,您将执行以下操作:

public static void main(String args[]) throws Exception {
        File f=new File("d:\\inbox\\json\\test.txt");
        if (f.exists()) {
            f.delete();
        }
        f.createNewFile();
        FileWriter fileWriter = new FileWriter("d:\\inbox\\json\\test.txt", false);
        fileWriter.write(new Date().toString());
        fileWriter.close();
    }

答案 5 :(得分:0)

您的createNewFile()来电不会删除现有文件,只会创建一个新文件而不存在。

你需要这样做:

if (f.exists()) {
    f.delete();
}

答案 6 :(得分:0)

我还没有完全尝试过这个。但我相信这是因为您的File对象不是Garbage Collected。

File f = new File("test.txt");
if(f.exists()){
f.delete();
}

现在这非常重要。你不想创建一个新文件。在删除第一个内存地址后,它不会分配给相同的内存地址。

File f2 = new File("test.txt");
f2.write bla bla.

答案 7 :(得分:0)

我希望您的代码错过删除文件,然后只是附加到未删除的文件。要检查这一点,我建议更改代码

FileWriter fileWriter = new FileWriter("d:\\inbox\\json\\test.txt", false);
fileWriter.append(new Date().toString());
fileWriter.close();

System.out.println("Exists: " + Files.exists(Paths.get("d:\\inbox\\json\\test.txt"));
FileWriter fileWriter = new FileWriter("d:\\inbox\\json\\test.txt", false);
fileWriter.append(new Date().toString());
fileWriter.close();

如果您在控制台中看到Exists: true,那就是您遇到问题的原因。