2012-01-20 50 views
2

在java桌面應用程序中,我經常使用對文件的引用。 到目前爲止,我儘快構造的文件對象,然後通過File對象的方法,例如:
java,評估大量使用URL而不是文件

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

我評價一個廣泛的替代FileURL
這主要是因爲URL可以很容易地將文件引用到zip或jar文件中。

URL是否存在SecurityManager問題(引用本地文件時)File類對同一個文件沒有問題?

由於這種重構會影響接口,而不僅僅是實現,所以我對這個「替換」的任何其他考慮都沒有興趣。

回答

3

的主要問題,你可能會遇到:

  • 在構建網址,你必須處理MalformedURLException。文件構造函數不會拋出這個異常。
  • 您失去了許多基於文件的便利方法,例如:文件是否存在;它是一個文件或目錄;是否可讀?將文件設置爲可讀或可寫。由於URL可能不會引用文件,因此這些不一定適用,並且在URL API中不可用。
  • 您訪問URL的方式發生變化。 URL有openStreamopenConnection方法;與文件,你可能會使用基於文件的流(例如FileInputStream)。
  • 如果URL需要網絡而不是磁盤訪問,那麼對可能產生的延遲的任何假設可能不再成立。

該URL類確實進行了一些SecurityManager檢查,但是鑑於它是桌面應用程序,您不能控制安全管理器設置嗎?

除此之外,由於URL是文件的超集(因爲它處理file:協議等),所以您應該能夠以相同的方式使用它。另一種選擇 - 不是傳遞文件或URL,而是儘可能使用流,因爲您可以根據需要使用文件或URL來生成流。

+0

對於流的建議+1。他們不僅可以處理基於文件或URL的源,甚至可以處理運行時在內存中生成的數據('ByteArrayInputStream')。 –

+0

+1,爲準確性。 「你不能控制安全管理器的設置嗎?」。我發現在Java桌面領域存在一個「完善的」程序的長期缺乏。這個應用程序應該在3-5臺機器上運行,而不是單個組織。一方面,我不知道java「InstallShield」,這是一個包裝我的應用程序併爲我管理JVM安全管理器設置的軟件。另一方面,據我所知,在客戶機上默認安裝JRE,爲應用程序提供了機器上的高級特權,並且我很想依靠這個事實。 – AgostinoX

+0

@AgostinoX我認爲你是對的:我想大多數安裝都具有啓動應用程序的用戶的所有權限。但是,我從來沒有必要部署到「鎖定」環境,所以我不知道。 「 – Ash

1

URL是否存在SecurityManager問題(引用本地文件時)File類對於同一個文件不會有問題?

甲沙箱應用程序號。只能訪問自己的類路徑上的URL,但任何可以創建和使用File的內容都以全部權限運行。