有时候需要在后台展示国家等信息,懒得去配置一个数据表专门存储这些信息,可采用如下代码:
import org.apache.commons.lang3.StringUtils; import sun.util.locale.provider.LocaleProviderAdapter; import sun.util.locale.provider.ResourceBundleBasedAdapter; import sun.util.resources.LocaleData; import sun.util.resources.OpenListResourceBundle; import java.util.*; import java.util.stream.Collectors; /** * 获取JDK内置的一些资源数据 */ public class DataResourceUtil { private static List<Country> countries; private static List<Currency> currencies; private static List<Language> languages; /** * 获取所有国家和对应的二字编码和三字编码 * * @return */ public static List<Country> getCountries() { if (countries != null) { return countries; } OpenListResourceBundle resource = getLocaleData().getLocaleNames(Locale.CHINA); synchronized (Country.class) { if (countries != null) { return countries; } Set<String> data = resource.keySet(); List<String> twoCodes = data.stream() .filter(code -> !StringUtils.isNumeric(code)) .filter(code -> StringUtils.isAllUpperCase(code)) .collect(Collectors.toList()); twoCodes.sort(Comparator.naturalOrder()); countries = twoCodes.stream().map(code -> { Locale locale = new Locale("", code); String threeCode = null; try { threeCode = locale.getISO3Country(); } catch (Exception e) { } return new Country(resource.getString(code), code, threeCode); }).collect(Collectors.toList()); countries = Collections.unmodifiableList(countries); return countries; } } /** * 获取所有币种和对应的简码 * * @return */ public static List<Currency> getCurrencies() { if (currencies != null) { return currencies; } OpenListResourceBundle resource = getLocaleData().getCurrencyNames(Locale.CHINA); synchronized (Currency.class) { if (currencies != null) { return currencies; } Set<String> data = resource.keySet(); List<String> codes = data.stream().filter(StringUtils::isAllLowerCase).collect(Collectors.toList()); codes.sort(Comparator.naturalOrder()); currencies = codes.stream().map(code -> new Currency(resource.getString(code), code.toUpperCase())).collect(Collectors.toList()); currencies = Collections.unmodifiableList(currencies); return currencies; } } /** * 获取系统的语言 * * @return */ public static List<Language> getLanguages() { if (languages != null) { return languages; } Locale[] localeList = Locale.getAvailableLocales(); synchronized (Language.class) { if (languages != null) { return languages; } languages = Arrays.stream(localeList).map(l -> { String iso3Country = null; try { iso3Country = l.getISO3Country(); } catch (MissingResourceException e) { } String language = l.getLanguage(); String iso3Language = l.getISO3Language(); String country = l.getCountry(); String displayCountry = l.getDisplayCountry(); String displayLanguage = l.getDisplayLanguage(); String displayName = l.getDisplayName(); if(StringUtils.isBlank( iso3Country)){ return null; } Country c = new Country(displayCountry, country, iso3Country); return new Language(displayLanguage, displayName, language, iso3Language, c); }).filter(Objects::nonNull).collect(Collectors.toList()); languages = Collections.unmodifiableList(languages); return languages; } } public static void main(String[] args) { // List<Country> countries = getCountries(); // countries.forEach(System.out::println); // List<Currency> currencies = getCurrencies(); // currencies.forEach(System.out::println); List<Language> languages = getLanguages(); languages.forEach(System.out::println); } private static LocaleData getLocaleData() { ResourceBundleBasedAdapter resource = ((ResourceBundleBasedAdapter) LocaleProviderAdapter.forJRE()); return resource.getLocaleData(); } public static class Country { // 国家名称 private String name; // 二字编码 private String twoCode; // 三字编码 private String threeCode; private Country(String name, String twoCode, String threeCode) { this.name = name; this.twoCode = twoCode; this.threeCode = threeCode; } public String getName() { return name; } public String getTwoCode() { return twoCode; } public String getThreeCode() { return threeCode; } @Override public String toString() { return "Country{" + "name='" + name + '/'' + ", twoCode='" + twoCode + '/'' + ", threeCode='" + threeCode + '/'' + '}'; } } public static class Currency { private String name; private String code; private Currency(String name, String code) { this.name = name; this.code = code; } public String getName() { return name; } public String getCode() { return code; } @Override public String toString() { return "Currency{" + "name='" + name + '/'' + ", code='" + code + '/'' + '}'; } } public static class Language { // 语言名称 private String name; // 语言名称使用国家 private String displayName; // 二字编码 private String twoCode; // 三字编码 private String threeCode; // 使用国家 private Country country; public Language(String name, String displayName, String twoCode, String threeCode, Country country) { this.name = name; this.displayName = displayName; this.twoCode = twoCode; this.threeCode = threeCode; this.country = country; } public String getName() { return name; } public String getDisplayName() { return displayName; } public String getTwoCode() { return twoCode; } public String getThreeCode() { return threeCode; } public Country getCountry() { return country; } @Override public String toString() { return "Language{" + "name='" + name + '/'' + ", displayName='" + displayName + '/'' + ", twoCode='" + twoCode + '/'' + ", threeCode='" + threeCode + '/'' + ", country=" + country + '}'; } } }
代码转自:
https://gitee.com/lnkToKing/codes/eom09jrdp8ybf56nu423v77