2012-09-14 33 views
7

Ví dụ: tiền Trung Quốc có mã số ISO 4217CNY. Vì giao dịch toàn cầu miễn phí bằng loại tiền tệ đó bị hạn chế, có một số tiền tương đương 'ngoài khơi' thứ hai, được gọi là CNH. Wikipedia có một chút của summary của tất cả điều này.Làm cách nào để thêm Đơn vị tiền tệ mới vào java.util.Currency cho mã quốc gia hiện tại trong Java 7? Ví dụ:

Trong Java 7, có method for updating bộ ba mã số ISO 4217 mà JVM giao cùng. Tuy nhiên, nó không thể được sử dụng để thêm mã đơn vị tiền tệ riêng vào mã quốc gia hiện tại: mã sẽ thay thế CNY bằng CNH, không tốt cho mục đích của tôi.

Làm cách nào để thêm CNH (không có trong danh sách ISO 4217) vào bộ tiền tệ có sẵn trong Java 7 mà không ghi đè CNY?

Đặt một cách khác, làm cách nào tôi có thể nhận được nhiều mã đơn vị tiền tệ cho một quốc gia?

Lưu ý rằng câu hỏi này: How do I add the new currency code to Java?hỏi và trả lời cho Java 6. Nhưng chiến lược thay thế java.util.CurrencyData không hoạt động vì tệp đó không còn tồn tại nữa.

+0

bản sao có thể có của [Làm cách nào để thêm mã tiền tệ mới vào Java?] (Http://stackoverflow.com/questions/9982537/how-do-i-add-the-new-currency-code-to- java) – bobs

+0

@bobs Phương pháp thực hiện điều này trong Java 6 so với Java 7. Câu hỏi bạn đã liên kết là Java 6, đây là Java 7. – sharakan

+0

@bobs Tôi biết ... Tôi đã hỏi cả hai! ;) – sharakan

Trả lời

8

Chìa khóa ở đây là trong một change that's part of Java 7 để cho phép cập nhật danh sách các đơn vị tiền tệ mà không cần xây dựng lại rt.jar bằng cách thay thế tệp có tên currency.data. Sử dụng phương pháp này, thay vì cách tiếp cận ghi đè currency.properties, cho phép bạn thêm mã Đơn vị tiền tệ mới mà không ảnh hưởng đến các mã tiền tệ khác từ cùng một quốc gia.

Điều còn lại chưa được trả lời là làm cách nào để thực sự xây dựng một currency.data mới. Tệp này được tạo từ tệp có tên CurrencyData.properties, có thể tìm thấy trong mã nguồn OpenJDK trong java/util.

Những gì tôi đã làm là sao chép các CurrencyData.properties tìm thấy trong OpenJDK source (openjdk\jdk\src\share\classes\java\util), và thay đổi dòng:

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

để

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

Sau đó, tôi nắm lấy file GenerateCurrencyData.java trong việc phân phối nguồn tại openjdk\jdk\make\tools\src\build\tools\generatecurrencydata. Tiện ích này lấy đầu vào từ System.In có cùng định dạng như CurrencyData.properties và chuyển nó thành tệp currency.data. Tôi đã thực hiện một thay đổi nhỏ để nó sử dụng một FileInputStream thay vì System.In:

currencyData.load(System.in); 

để

currencyData.load(new FileInputStream(fileName)); 

Run rằng trong hồ sơ CurrencyData.properties chỉnh sửa của bạn, và sau khi đưa file .data gốc ở đâu đó an toàn, đặt tệp currency.data kết quả vào thư mục JRE \ lib của bạn và bây giờ bạn có thể chạy mã sử dụng Currency.getInstance("CNH").

0

Để câu trả lời @sharakan: Bạn cũng có thể cần thêm mới được thay đổi tiền tệ, trong trường hợp của tôi BYN

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

ở định dạng: OLD_CUR; DATE_OF_CHANGE; NEW_CUR

Hy vọng nó sẽ giúp ai đó.

Các vấn đề liên quan