java,评估广泛使用的URL而不是File

时间:2012-01-20 09:30:57

标签: java file url

在java桌面应用程序中,我经常使用对文件的引用。 到目前为止,我已经尽快构建了File对象,然后将File对象传递给方法,例如:

public void loadConfig(File configFile) {
    ...
}

我正在评估用File广泛替换URL 这主要是因为URL可以轻松地将文件引用到zip或jar文件中。

URL是否存在SecurityManager问题(当引用本地文件时)File类不会对同一文件有什么问题?

由于这种重构会影响接口而不仅仅是实现,我对此“替换”的任何其他考虑也感兴趣。

2 个答案:

答案 0 :(得分:3)

您可能遇到的主要问题:

  • 构建网址时,您必须处理MalformedURLException。文件构造函数不会抛出此异常。
  • 您丢失了许多基于文件的便捷方法,例如:文件是否存在;它是一个文件或目录;它是否可读;将文件设置为可读或可写。由于URL可能不引用文件,因此这些文件不一定适用,并且在URL API中不可用。
  • 您访问网址的方式发生了变化。网址包含openStreamopenConnection个方法;使用File,您可能会使用基于文件的流(例如FileInputStream)。
  • 如果网址需要网络,而不是磁盘访问权限,那么您对延迟的任何假设都可能不再适用。

URL类确实会进行一些SecurityManager检查,但鉴于它是桌面应用程序,您是否无法控制安全管理器设置?

除此之外,由于URL是文件的超集(因为它处理file:协议等),您应该能够以相同的方式使用它。另一个选项 - 而不是传递文件或URL - 是尽可能使用流,因为您可以根据需要使用文件或URL来生成流。

答案 1 :(得分:1)

  

URL是否存在SecurityManager问题(当引用本地文件时)File类不会对同一文件有什么问题?

没有

沙盒应用。只能访问自己的类路径中的URL,但任何可以创建和使用File的内容都以所有权限运行。