10

例如,中国货币有ISO 4217代码CNY。由于该货币的全球自由交易受到限制,因此还有第二种“离岸”货币等值,称为CNH. 维基百科对这一切有一些总结

Java 7中,有一种方法可以更新ISO 4217JVM 附带的三字母代码集。但是,它不能用于向现有国家代码添加单独的货币代码:它将替换CNYCNH,这对我的目的没有好处。

如何在不覆盖的情况下将CNH(不在ISO 4217列表中)添加到可用货币集合中? Java 7CNY

换句话说,我怎样才能获得一个国家的多个货币代码?

注意这个问题:How do I add the new currency code to Java? 询问并回答Java 6。但是替换策略java.util.CurrencyData不起作用,因为该文件不再存在。

4

2 回答 2

11

这里的关键是作为 Java 7 一部分的更改,允许更新货币列表,而无需通过替换名为 .jar 的文件来重建 rt.jar currency.data。使用这种方法而不是currency.properties覆盖方法,您可以添加新的货币代码,而不会影响来自同一国家的其他货币代码。

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

我所做的是复制CurrencyData.propertiesOpenJDK 源代码( 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 目录,您现在可以运行使用 .data 的代码Currency.getInstance("CNH")

于 2012-09-14T21:59:52.087 回答
0

对于@sharakan 的回答:您可能还需要添加新更改的货币,在我的情况下为 BYN

BY=BYR;2016-07-01-00-00-00;BYN

格式:OLD_CUR;DATE_OF_CHANGE;NEW_CUR

希望它会帮助某人。

于 2016-11-25T12:49:16.773 回答