我在Eclipse中制作了一个Java程序。我开始使用Windows XP,但最近升级了。为什么我的程序不能删除它在Win7下创建的文件?
作为其保存机制的一部分,程序将设置写入文件settings_new.sav
。如果这样,它会删除settings.sav
,并重新命名为与旧名称匹配。虽然它在winXP下工作(至少我认为它确实,但我现在无法检查),但在win7下,它无法删除该文件,即使它是创建该文件的程序(尽管该程序是一个不同的实例)。
该文件被Eclipse拾取,并可以从那里很愉快地删除。我可以手动删除它。我是我自己电脑上的管理员。该文件夹就在工作区文件夹内,并不在Program Files文件夹中(尽管如此,我不知道最终用户是否会安装它)。该程序可以创建和修改文件就好了。它不会抛出任何异常,我认为如果它是win7阻止它的话。
任何想法?
它实际上是Windows中的文件锁定机制。在Linux下,相同的代码可能工作得很好。但我同意,您应该明确关闭文件的访问权限,以使其在任何地方正常工作。 –
@MarkRobinson:有趣的是,我也应该在Linux中测试我的swing应用程序。似乎开发人员应该在操作系统级别而不是JVM上预见问题。 – PraveenMax
Windows和Linux有不同的文件锁定语义。 Linux将允许你删除一个你已经打开的文件进行编辑而不会被炸毁。然后,您可以创建一个具有相同名称的新文件,而不会出现问题。在Windows中,如果文件在另一个进程中打开,它可以防止删除文件。这种情况发生的具体情况很大程度上取决于它是如何打开的(通过方法/和访问类型)。如果你有更多的问题,我建议你发布一个针对Windows家伙的新SO问题:) –