2012-09-14 12 views
7

Per esempio, la valuta cinese ha il codice CNYISO 4217. Poiché il libero scambio globale in quella valuta è limitato, esiste un secondo equivalente in valuta "offshore", chiamato CNH. Wikipedia ha un po 'di summary di tutto questo.Come aggiungere una nuova valuta a java.util.Currency per un codice paese esistente in Java 7?

In Java 7, c'è un method for updating il set di tre codici ISO 4217 con cui la JVM viene spedita. Tuttavia, non può essere utilizzato per aggiungere un codice valuta separato a un codice paese esistente: sostituirà CNY con CNH, che non va bene per i miei scopi.

Come aggiungo CNH (che non è nella lista ISO 4217) per l'insieme delle valute disponibili in Java 7, senza sovrascrivere CNY?

In un altro modo, come posso ottenere più codici di valuta per un singolo paese?

presente che questa domanda: How do I add the new currency code to Java? era ha chiesto e ha risposto per Java 6. Ma la strategia di sostituzione di java.util.CurrencyData non funziona perché quel file non esiste più.

+0

possibile duplicato di [Come aggiungere il nuovo codice valuta a Java?] (Http://stackoverflow.com/questions/9982537/how-do-i-add-the-new-currency-code-to- java) – bobs

+0

@bobs Il metodo per farlo in Java 6 contro Java 7. La domanda a cui ti sei collegato è Java 6, questo è Java 7. – sharakan

+0

@bobs Lo so ... Ho chiesto ad entrambi! ;) – sharakan

risposta

8

La chiave qui è in un change that's part of Java 7 per consentire l'aggiornamento dell'elenco di valute senza ricostruire rt.jar sostituendo un file denominato currency.data. Utilizzando questo approccio, piuttosto che l'approccio di override currency.properties, è possibile aggiungere nuovi codici valuta senza influire su altri dallo stesso paese.

Ciò che rimane non è indicato come realizzare effettivamente un nuovo currency.data. Questo file viene generato da un file chiamato CurrencyData.properties, che può essere trovato nel codice sorgente OpenJDK in java/util.

Quello che ho fatto è stato copiare il CurrencyData.properties trovato nella OpenJDK source (openjdk\jdk\src\share\classes\java\util), e ha cambiato la linea:

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

a

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

Poi ho preso il file GenerateCurrencyData.java nella distribuzione sorgente a openjdk\jdk\make\tools\src\build\tools\generatecurrencydata. Questa utility prende input da System.In nello stesso formato di CurrencyData.properties e la trasforma in un file currency.data. Ho fatto un piccolo cambiamento in modo che ha usato un FileInputStream invece di System.In:

currencyData.load(System.in); 

a

currencyData.load(new FileInputStream(fileName)); 

Run che sul vostro file CurrencyData.properties modificato e, dopo aver messo il file .data originale in un luogo sicuro, posizionare il file currency.data risultante nella directory JRE \ lib e ora è possibile eseguire il codice che utilizza Currency.getInstance("CNH").

0

Per la risposta @sharakan: Potrebbe anche essere necessario aggiungere la valuta appena modificata, nel mio caso BYN

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

nel formato: OLD_CUR; DATE_OF_CHANGE; NEW_CUR

Spero che possa aiutare qualcuno.