如何为Java 7中的现有国家/地区代码添加新的Currency到java.util.Currency?
例如,中国货币的ISO 4217
代码为CNY
。 由于该货币的自由全球交易受到限制,因此存在第二个“离岸”货币等价物,称为CNH
。 维基百科对这一切有一点总结 。
在Java 7
,有一种方法可以更新 JVM附带的三个字母ISO 4217
代码集。 但是,它不能用于向现有国家/地区代码添加单独的货币代码:它会用CNH
取代CNY
,这对我的目的不利。
如何在不覆盖CNY
情况下将CNH
(不在ISO 4217
列表中)添加到Java 7
的可用货币集中?
换句话说,如何为一个国家/地区获取多种货币代码?
请注意,这个问题: 如何将新货币代码添加到Java? 被问到并回答了Java 6 。 但是替换java.util.CurrencyData
的策略不起作用,因为该文件不再存在。
这里的关键是改变Java 7的一部分,允许更新货币列表而无需通过替换名为currency.data
的文件来重建rt.jar。 使用此方法而不是currency.properties
覆盖方法,允许您添加新的货币代码,而不会影响来自同一国家/地区的其他货币代码。
什么是未说明的,如何实际建立一个新的currency.data
。 此文件是从名为CurrencyData.properties
的文件生成的,该文件可以在java / util的OpenJDK源代码中找到。
我所做的是复制OpenJDK源中的CurrencyData.properties
( openjdk\jdk\src\share\classes\java\util
),并更改了该行:
BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-\
至
BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNH156-CNY156-COP170-CRC188-CSD891-CUP192-\
然后我在openjdk\jdk\make\tools\src\build\tools\generatecurrencydata
中获取了源代码发行版中的GenerateCurrencyData.java
文件。 此实用程序以与CurrencyData.properties相同的格式从System.In获取输入,并将其转换为currency.data文件。 我稍作改动,以便它使用FileInputStream而不是System.In:
currencyData.load(System.in);
至
currencyData.load(new FileInputStream(fileName));
在您编辑的CurrencyData.properties文件中运行该文件,并将原始.data文件放在安全的地方后,将生成的currency.data文件放入JRE \ lib目录,然后您就可以运行使用Currency.getInstance("CNH")
代码Currency.getInstance("CNH")
。
致@sharakan答案:您可能还需要添加新更改的货币,在我的情况下是BYN
BY = BYR; 2016-07-01-00-00-00; BYN
格式为:OLD_CUR; DATE_OF_CHANGE; NEW_CUR
希望它会帮助某人。