如何在应用程序中正确处理对文件的引用?

时间:2009-09-17 15:00:13

标签: java design-patterns file

我一直想知道如何处理应用程序中的文件。假设我们有一个Object,其中包含有关像UUID这样的文件的几个数据以及对磁盘上文件的引用。

即使此Object是不可变的,也可能存在副作用,例如文件将被应用程序的一部分删除但另一个不知道它,使Object无法使用。

我可以使用这种情况下方便的模式吗?或者每次使用File引用实际指向现有文件的Object时,是否必须仔细检查?这可能是唯一的解决方案,因为文件可以从应用程序外部删除,但可能会使应用程序处于难以处理的状态。

另一方面存在问题:谁负责删除文件?由于Object可能是一个普通的值对象,它可能被系统的其他部分引用,代码的任何部分都不能删除文件以进行清理,以避免副作用......

但可能存在一种模式或政策可用于在这种情况下简化处理。

4 个答案:

答案 0 :(得分:1)

您似乎有两种情况需要处理:

1)。您使用的资源受外部删除,陈旧和不可用的影响。任何外部资源都是如此,例如数据库,远程服务器和文件。所以很明显你需要处理异常处理,而且你已经有了这个问题......但是还有更多内容,请看下一个案例......

2)。您的应用程序的几个部分想要使用相同的资源,我们希望调解它们的使用,防止它们相互干扰。

为此,有两种可能性:resoruce本身具有某种中介(例如文件锁)并且您可以利用它。或者你需要对它进行监管,而这正是Jean-Lou所说的,代理人可以参与其中。现在我们可能无法强制使用代理,如果有人编写代码绕过代理并直接转到文件,那么我们就没有保护 - 这就像一些外力破坏一样你的资源。假设我们有合作,我们可以在代理中加入大量的聪明才智:

A)。统计用户,因此警方删除 B)。计算用户并在最后一个离开时自动删除。 C)。如果创建昂贵的代理,请汇集代理。 d)。如果我们得到一个例外,删除或标记所有现在陈旧的代理 E)。发现两个不同的文件名引用同一个文件并联合起警。

答案 1 :(得分:0)

这就是为什么许多语言都有例外。

如果在您的程序之外使真正的操作系统级文件无效,则您的File对象将无效并将引发异常。

这是标准方法:例外。

答案 2 :(得分:0)

1)在这种情况下,您可能需要考虑使用一些状态信息来处理句柄。

2)可能更合适的是使用异常处理。

答案 3 :(得分:0)

在对文件执行任何操作之前,应始终仔细检查文件是否存在。无论您的应用程序有多好,总会有人在那里做一些您不会期望的事情,特别是在您的应用程序之外工作时。一行简单的代码可以是工作应用程序和失败的应用程序之间的区别。

检查文件是否存在,添加例外。最佳方式。