例如,中国货币有ISO 4217
代码CNY
。由于该货币的自由全球交易受到限制,因此存在第二个“离岸”货币等价物,称为CNH
。维基百科有一点summary这一切。
在Java 7
中,有一个method for updating JVM附带的三个字母ISO 4217
代码集。但是,它不能用于向现有国家/地区代码添加单独的货币代码:它会将CNY
替换为CNH
,这对我的目的无益。
如何在不覆盖CNH
的情况下,将ISO 4217
(不在Java 7
列表中)添加到CNY
中的可用货币集中?
换句话说,如何为一个国家/地区获取多种货币代码?
请注意,此问题:How do I add the new currency code to Java?已询问 Java 6 。但是替换java.util.CurrencyData
的策略不起作用,因为该文件不再存在。
答案 0 :(得分:11)
此处的密钥位于change that's part of Java 7,允许更新货币列表而无需通过替换名为currency.data
的文件重建rt.jar。使用此方法而不是currency.properties
覆盖方法,您可以添加新的货币代码,而不会影响同一国家/地区的其他代码。
未说明的是如何实际构建新的currency.data
。
此文件是从名为CurrencyData.properties
的文件生成的,该文件可以在java / util的OpenJDK源代码中找到。
我所做的是复制OpenJDK source(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-\
然后我在GenerateCurrencyData.java
处抓取了源代码分发中的openjdk\jdk\make\tools\src\build\tools\generatecurrencydata
文件。此实用程序以与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目录,现在可以运行使用{{1 }}
答案 1 :(得分:0)
致@sharakan答案: 您可能还需要添加新更改的货币,在我的情况下为BYN
BY = BYR; 2016-07-01-00-00-00; BYN
格式: OLD_CUR; DATE_OF_CHANGE; NEW_CUR
希望它会对某人有所帮助。