In der Java-Sprache wird eine Textdatei mit der Erweiterung .properties als Ressourcendatei verwendet. Das Inhaltsformat dieses Dateityps ähnelt:
#Kommentaranweisung
some_key=some_value
. Zeilen, die mit # beginnen, werden als Kommentarzeilen verwendet und bei der Verarbeitung durch die ResourceBundle-Klasse ignoriert. Die übrigen Zeilen können in der Form „Schlüsselname=Wert“ beschrieben werden.
Die ResourceBundle-Klasse von Java kann Dateien in dieser Form verarbeiten.
Die ResourceBundle-Klasse ist auch sehr einfach zu verwenden. Lassen Sie uns ein Beispiel zur Veranschaulichung verwenden.
Wir gehen davon aus, dass wir die folgenden 2 Eigenschaftendateien haben:
TestProperties.properties view plainprint? #key=value userIdLabel=User Id: userNameLabel=User Name: #key=value userIdLabel=User Id: userNameLabel=User Name: TestProperties_zh_CN.properties view plainprint? #key=value userIdLabel=用户ID: userNameLabel=用户名: #key=value userIdLabel=用户ID: userNameLabel=用户名:
Möglicherweise stellen Sie fest, dass der Dateiname TestProperties_zh_CN.properties einen _zh_CN-Namen enthält, der tatsächlich für die Lokalisierungsverarbeitung von Ressourcendateien verwendet wird. Was ist Lokalisierung? Lassen Sie uns kurz erklären: Wenn wir das System entwickeln, müssen wir häufig unterschiedliche Schnittstellen für Benutzer in verschiedenen Regionen vorbereiten. Wenn ein System beispielsweise sowohl auf englischsprachige als auch auf chinesische Benutzer ausgerichtet ist, müssen wir zwei Sätze für das System vorbereiten . Die Schnittstelle (einschließlich Nachrichten), ein Satz ist eine englische Schnittstelle und der andere ist eine chinesische Schnittstelle. Abgesehen von den unterschiedlichen Schnittstellen sind die Systemprozesse natürlich identisch. Natürlich ist es für uns unmöglich, zwei unterschiedliche Systeme für sie zu entwickeln. Was sollen wir tun? Dies erfordert eine Lokalisierung der Ressourcen. Mit anderen Worten: Je nach Region oder Sprache des Benutzers werden unterschiedliche Ressourcendateien vorbereitet, sodass unterschiedliche Schnittstellen für unterschiedliche Benutzer vorbereitet werden können, aber die gleiche Systemlogik verwendet wird.
Bei den beiden Dateien oben handelt es sich um zwei verschiedene Ressourcensätze.
Wir verwenden die ResourceBundle-Klasse, um den Code verschiedener Ressourcen zu verarbeiten:
TestProperties.java view plainprint? package com.test.properties; import java.util.Enumeration; import java.util.Locale; import java.util.ResourceBundle; public class TestProperties { public static void main(String []args) { String resourceFile = "com.test.properties.TestProperties"; //创建一个默认的ResourceBundle对象 //ResourceBundle会查找包com.test.properties下的TestProperties.properties的文件 //com.test.properties是资源的包名,它跟普通java类的命名规则完全一样: //- 区分大小写 //- 扩展名 .properties 省略。就像对于类可以省略掉 .class扩展名一样 //- 资源文件必须位于指定包的路径之下(位于所指定的classpath中) //另外,对于非西欧字符(比如中日韩文等),需要使用native2ascii命令或类似工具将其转换成ascii码文件格式,否则会显示乱码。 System.out.println("---Default Locale---"); ResourceBundle resource = ResourceBundle.getBundle(resourceFile); testResourceBundle(resource); System.out.println("---Locale.SIMPLIFIED_CHINESE---"); //创建一个指定Locale(本地化)的ResourceBundle对象,这里指定为Locale.SIMPLIFIED_CHINESE //所以ResourceBundle会查找com.test.properties.TestProperties_zh_CN.properties的文件 // //中文相关的Locale有: //Locale.SIMPLIFIED_CHINESE : zh_CN resource = ResourceBundle.getBundle(resourceFile, Locale.SIMPLIFIED_CHINESE); //Locale.CHINA : zh_CN //Locale.CHINESE: zh testResourceBundle(resource); //显示 // } private static void testResourceBundle(ResourceBundle resource) { //取得指定关键字的value值 String userIdLabel = resource.getString("userIdLabel"); System.out.println(userIdLabel); //取得所有key值 Enumeration enu = resource.getKeys(); System.out.println("keys:"); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); } } } package com.test.properties; import java.util.Enumeration; import java.util.Locale; import java.util.ResourceBundle; public class TestProperties { public static void main(String []args) { String resourceFile = "com.test.properties.TestProperties"; //创建一个默认的ResourceBundle对象 //ResourceBundle会查找包com.test.properties下的TestProperties.properties的文件 //com.test.properties是资源的包名,它跟普通java类的命名规则完全一样: //- 区分大小写 //- 扩展名 .properties 省略。就像对于类可以省略掉 .class扩展名一样 //- 资源文件必须位于指定包的路径之下(位于所指定的classpath中) //另外,对于非西欧字符(比如中日韩文等),需要使用native2ascii命令或类似工具将其转换成ascii码文件格式,否则会显示乱码。 System.out.println("---Default Locale---"); ResourceBundle resource = ResourceBundle.getBundle(resourceFile); testResourceBundle(resource); System.out.println("---Locale.SIMPLIFIED_CHINESE---"); //创建一个指定Locale(本地化)的ResourceBundle对象,这里指定为Locale.SIMPLIFIED_CHINESE //所以ResourceBundle会查找com.test.properties.TestProperties_zh_CN.properties的文件 // //中文相关的Locale有: //Locale.SIMPLIFIED_CHINESE : zh_CN resource = ResourceBundle.getBundle(resourceFile, Locale.SIMPLIFIED_CHINESE); //Locale.CHINA : zh_CN //Locale.CHINESE: zh testResourceBundle(resource); //显示 // } private static void testResourceBundle(ResourceBundle resource) { //取得指定关键字的value值 String userIdLabel = resource.getString("userIdLabel"); System.out.println(userIdLabel); //取得所有key值 Enumeration enu = resource.getKeys(); System.out.println("keys:"); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); } } }
Erklärung:
1 Zum besseren Verständnis haben wir die Erklärung in den Java-Quellcode eingefügt und werden hier nicht näher darauf eingehen.
2. Für die chinesische Ressourcendatei TestProperties_zh_CN.properties müssen Sie den Befehl native2ascii verwenden, um sie in ASCII-Code zu konvertieren. Zum Beispiel:
native2ascii -encoding UTF-8 c:TestProperties_zh_CN.properties c:javacomtestpropertiesTestProperties_zh_CN.properties
Was die detaillierte Verwendung von native2ascii betrifft, werde ich hier nicht näher darauf eingehen.
3. Speichern Sie die oben genannten drei Dateien im Verzeichnis c:javacomtestproperties. Unter ihnen ist TestProperties_zh_CN.properties eine von native2ascii konvertierte Datei.
4, kompilieren und ausführen, es wird auf dem Bildschirm angezeigt:
c:javajavac com.test.properties.TestProperties.java
c:javajava com.test.properties.TestProperties
---Standardgebietsschema-- -
Benutzer-ID:
keys:
userNameLabel
userIdLabel
---Locale.SIMPLIFIED_CHINESE---
Benutzer-ID:
keys:
userNameLabel
userIdLabel
Das obige ist der detaillierte Inhalt vonWie Java mit Eigenschaftenressourcendateien umgeht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!