由于某些原因我必须根据我们的客户端删除旧文件并创建新文件
修改日期是更改为当前时间,但创建日期不会更改为当前时间。
我的代码如下
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();
}
此代码删除旧数据并写入新数据
但为什么日期创建时间不会改变..
请帮我弄清楚我的代码有什么问题。 提前谢谢。
答案 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
,那就是您遇到问题的原因。