如何在Java中通过运行命令选项设置对应的字符串变量
实现支持命令行切换语言的Java程序方案
1. 修正参数传递格式
你示例中给出的命令参数位置错误,JVM会将类名/源文件路径之前的参数识别为JVM标准选项,直接运行会抛出Unrecognized option: --language=english的报错。
有两种合法的传参方案可选:
- 方案1(推荐,程序入参形式):将自定义参数放到源文件/主类声明之后
命令示例:java ClassName.java --language="english"
打jar包后运行示例:java -jar yourApp.jar --language="english" - 方案2(系统属性形式):用JVM标准的-D参数传递自定义配置
命令示例:java -Dlanguage="english" ClassName.java
2. 最简实现示例(单文件+内置国际化能力)
我们用Java原生的ResourceBundle做国际化配置,无需引入第三方依赖即可实现多语言切换。
第一步:新建语言资源文件
和你的ClassName.java放在同一目录下,分别创建两个配置文件:
messages_zh_CN.properties(中文文案)greeting=你好,程序运行成功 tip=当前使用的是中文语言messages_en_US.properties(英文文案)greeting=Hello, program runs successfully tip=Current language is English
第二步:主类代码实现
import java.util.Locale; import java.util.ResourceBundle; public class ClassName { public static void main(String[] args) { // 默认使用中文 String targetLang = "chinese"; // 如果是用方案1的程序入参形式,用下面的逻辑解析参数 for (String arg : args) { if (arg.startsWith("--language=")) { targetLang = arg.split("=", 2)[1].replace("\"", "").trim(); break; } } // 如果是用方案2的系统属性形式,替换上面的解析逻辑为下面这行即可 // String targetLang = System.getProperty("language", "chinese"); // 加载对应语言的资源包 Locale locale = "english".equalsIgnoreCase(targetLang) ? Locale.US : Locale.CHINA; ResourceBundle langBundle = ResourceBundle.getBundle("messages", locale); // 测试输出多语言文案 System.out.println(langBundle.getString("greeting")); System.out.println(langBundle.getString("tip")); } }
3. 运行测试
- 中文运行命令:
java ClassName.java --language="chinese"
输出:你好,程序运行成功 当前使用的是中文语言 - 英文运行命令:
java ClassName.java --language="english"
输出:Hello, program runs successfully Current language is English
内容的提问来源于stack exchange,提问作者Mario Barbieri
相关产品推荐
相关产品推荐

