2012-10-06 60 views
1

從我剛纔的問題java-util-currency-getinstance-throwing-illegalargumentexception之後,我一直在尋找的java.util.Currencyjava.util.Currency中和ISO 4217個標準

的源代碼,我看到下面的代碼片段:

static { 
    AccessController.doPrivileged(new PrivilegedAction() { 
    public Object run() { 
     String homeDir = System.getProperty("java.home"); 
     try { 
     String dataFile = homeDir + File.separator + 
     "lib" + File.separator + "currency.data"; 
     DataInputStream dis = new DataInputStream(
     new BufferedInputStream(
     new FileInputStream(dataFile))); 
     if (dis.readInt() != MAGIC_NUMBER) { 
      throw new InternalError("Currency data is possibly corrupted"); 
     } 
     .... 
     .... 
     .... 
     .... 
     if (false) { 
      // look for the properties file for overrides 
      try { 
      File propFile = new File(homeDir + File.separator + 
      "lib" + File.separator + 
      "currency.properties"); 
      //more code 

      } 

我想知道關於currency.datacurrency.properties的位置,因爲我無法在C:\Program Files\Java\jre6\lib內找到任何此類文件。

在rt.jar下面,我可以看到一個類CurrencyData,它定義了一些條目,但不知道它如何與java.util.Currency相關。

我在看public static Currency getInstance(String currencyCode) {}看看它是如何檢查給定的貨幣代碼是否在ISO 4217列表中。 CurrencyData.properties看起來像是用來存儲和傳遞此信息的文件Update currency data to the latest ISO 4217 standard

希望得到一些關於此的更多信息。目前我使用下面的Java版本:

java version "1.6.0_21" 
Java(TM) SE Runtime Environment (build 1.6.0_21-b07) 
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode) 
+0

我創建了一個增強的ISO 4217枚舉(以及其他ISO枚舉)。該代碼可在此處獲得: https://github.com/scout-2766/Iso4J/blob/master/README.md(免費) –

回答

0

你聯繫到正在OpenJDK的6源代碼,但您使用的是Oracle的Java 6,甲骨文的Java 6的源代碼不引用這些貨幣的文件,因此他們將不會出現在您的安裝中。

請記住,OpenJDK從Oracle Java 7分支出來(確實引用Currency類中的那些文件)。 OpenJDK 6是通過從OpenJDK 7中剝離代碼創建的,直到它符合Java 6規範(請參閱this link for info)。顯然這個特定的代碼塊在後端存活。

我懷疑如果你安裝OpenJDK 6,你會發現這些文件。同樣,我的Oracle Java 7安裝包含這些文件。

請注意,Oracle Java 6似乎將貨幣數據存儲在程序包專用的java.util.CurrencyData類中。

+0

我正在查看我的JDK rt.jar,但沒有找到此類屬性。我想知道Oracle在哪裏保存有關貨幣代碼信息的信息,如ISO –

+0

@UmeshAwasthi請參閱上面我編輯的答案中的最後一段。我建議你購買Oracle 6源代碼並看看。 –

+0

是的,我已經在我的問題中提到它,感謝您的投入! –