如何为java 7中的现有国家代码向java.util.Currency添加新货币?

如何为java 7中的现有国家代码向java.util.Currency添加新货币?,java,jvm,currency,java-7,Java,Jvm,Currency,Java 7,例如,中国货币有ISO4217codeCNY。由于该货币的全球自由交易受到限制,因此还有第二种“离岸”货币等价物,称为CNH。维基百科有一点类似于这一切 在Java7中,JVM附带了一组三个字母的ISO4217代码。但是,它不能用于将单独的货币代码添加到现有的国家代码中:它将用CNH替换CNY,这对我的目的没有好处 如何将CNH(不在ISO 4217列表中)添加到Java 7中的可用货币集合中,而不覆盖CNY 换句话说,我怎样才能为一个国家获得多个货币代码 请注意,这个问题:是针对Java6提出

例如,中国货币有
ISO4217
code
CNY
。由于该货币的全球自由交易受到限制,因此还有第二种“离岸”货币等价物,称为
CNH
。维基百科有一点类似于这一切

Java7
中,JVM附带了一组三个字母的
ISO4217
代码。但是,它不能用于将单独的货币代码添加到现有的国家代码中:它将用
CNH
替换
CNY
,这对我的目的没有好处

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

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

请注意,这个问题:是针对Java6提出并回答的。但是替换
java.util.CurrencyData
的策略不起作用,因为该文件已不存在。

这里的关键在于,通过替换名为
currency.data
的文件,允许更新货币列表,而无需重建rt.jar。使用此方法,而不是
currency.properties
override方法,可以添加新的货币代码,而不会影响来自同一国家/地区的其他货币代码

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

我所做的是复制(
openjdk\jdk\src\share\classes\java\util
)中的
CurrencyData.properties
),并更改了行:

BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-\

然后我在
openjdk\jdk\make\tools\src\build\tools\GenerateCurrencyData
上抓取了源代码发行版中的
GenerateCurrencyData.java
文件。此实用程序以与CurrencyData.properties相同的格式从System.In获取输入,并将其转换为currency.data文件。我做了一点小小的更改,使其使用FileInputStream而不是System。在:

currencyData.load(System.in);

在编辑好的CurrencyData.properties文件上运行该文件,将原始的.data文件放在安全的地方后,将生成的currency.data文件放在JRE\lib目录中,现在您可以运行使用
currency.getInstance(“CNH”)

的代码,以获得@sharakan答案: 您可能还需要添加新更改的货币,在我的例子中是BYN

BY=BYR;2016-07-01-00-00-00;拜恩

格式: 老狗狗;变更日期;纽约


希望它能帮助一些人。

可能重复@bobs在Java 6和Java 7中的方法。你链接到的问题是Java 6,这是Java 7。@bobs我知道。。。我问了他们两个!;)
currencyData.load(System.in);
currencyData.load(new FileInputStream(fileName));