根据我之前的问题java-util-currency-getinstance-throwing-illegalargumentexception,我查看了java.util.Currency
的源代码我看到了以下代码片段:
static {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
String homeDir = System.getProperty("java.home");
try {
String dataFile = homeDir + File.separator +
"lib" + File.separator + "currency.data";
DataInputStream dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream(dataFile)));
if (dis.readInt() != MAGIC_NUMBER) {
throw new InternalError("Currency data is possibly corrupted");
}
....
....
....
....
if (false) {
// look for the properties file for overrides
try {
File propFile = new File(homeDir + File.separator +
"lib" + File.separator +
"currency.properties");
//more code
}
我想知道currency.data
或currency.properties
的位置,因为我无法在C:\Program Files\Java\jre6\lib
内找到任何此类文件。
在rt.jar下查看我可以看到一个类CurrencyData
,它定义了一些条目但不确定它与java.util.Currency
的关系。
我正在查看public static Currency getInstance(String currencyCode) {}
以查看它是如何检查给定的货币代码是否在ISO 4217列表下。 CurrencyData.properties
看起来像用于存储和传递此信息Update currency data to the latest ISO 4217 standard
希望获得更多相关信息。目前我正在使用以下Java版本:
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)
答案 0 :(得分:0)
您链接的源代码是OpenJDK 6,但您使用的是Oracle Java 6. Oracle Java 6的源代码不引用这些货币文件,因此它们不会出现在您的安装中。
请记住,OpenJDK从Oracle Java 7( 引用Currency
类中的那些文件)中分支出来。 OpenJDK 6是通过从OpenJDK 7中剥离代码创建的,直到它符合Java 6规范(参见this link for info)。很明显,这个特殊的代码块在后端端口中幸存下来。
我怀疑如果您安装OpenJDK 6,您将找到这些文件。同样,我的Oracle Java 7安装包含这些文件。
请注意,Oracle Java 6似乎将货币数据存储在包私有java.util.CurrencyData
类中。