如何在Java 7中为现有国家/地区代码的java.util.Currency添加新货币?

时间:2012-09-14 21:59:52

标签: java jvm currency java-7

例如,中国货币有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的策略不起作用,因为该文件不再存在。

2 个答案:

答案 0 :(得分:11)

此处的密钥位于change that's part of Java 7,允许更新货币列表而无需通过替换名为currency.data的文件重建rt.jar。使用此方法而不是currency.properties覆盖方法,您可以添加新的货币代码,而不会影响同一国家/地区的其他代码。

未说明的是如何实际构建新的currency.data。 此文件是从名为CurrencyData.properties的文件生成的,该文件可以在java / util的OpenJDK源代码中找到。

我所做的是复制OpenJDK sourceCurrencyData.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

希望它会对某人有所帮助。