直接用 properties 加文件流可不依赖 spring 读取配置,核心三步:写好 app.properties、用类加载器或 fileinputstream 加载、安全获取值;推荐类加载器方式以保证 jar 包中正常运行。

直接用 Properties 加文件流就能在控制台项目里把配置“读进来”,不用框架、不依赖 Spring,适合练手或小型工具。核心就三步:写好 .properties 文件、用类加载器或文件流加载、按 key 拿值。
准备一个标准的配置文件
在项目根目录或 src/main/resources(Maven 结构)下新建 app.properties,内容如下:
app.name=DemoTool
app.version=0.1.0
# 日志路径
log.dir=./logs
log.level=INFO
# 超时设置(单位:秒)
timeout.seconds=30
用类加载器加载资源(推荐)
这种方式不写死绝对路径,打包成 JAR 后也能正常读取,适合大多数控制台项目。
- 确保
app.properties在 classpath 下(比如放在src/main/resources) - 用
getClass().getClassLoader().getResourceAsStream("app.properties")获取输入流 - 判空很重要——如果流为
null,说明文件没被正确打包或路径不对
示例代码:
InputStream in = YourClass.class.getClassLoader().getResourceAsStream("app.properties");
if (in == null) {
System.err.println("找不到 app.properties,请检查是否在 classpath 中");
return;
}
try {
props.load(in);
} catch (IOException e) {
e.printStackTrace();
} finally {
try { in.close(); } catch (IOException ignored) {}
}
安全地获取配置值
别直接用 getProperty("xxx") 然后假设它一定存在,容易空指针。建议:
- 用带默认值的重载方法:
props.getProperty("timeout.seconds", "15") - 对关键配置做非空校验,比如数据库 URL 或用户名缺失时提前报错退出
- 数值型字段手动转类型,例如:
int timeout = Integer.parseInt(props.getProperty("timeout.seconds", "30"));(加 try-catch 更稳妥)
补充:用 FileInputStream 读本地文件(调试用)
如果只是本地跑着玩、不想管 classpath,也可以直接读磁盘路径:
Properties props = new Properties();try (FileInputStream fis = new FileInputStream("app.properties")) {
props.load(fis);
} catch (IOException e) {
System.err.println("读取配置文件失败:" + e.getMessage());
}
⚠️ 注意:这种写法在打包后会失效,因为 JAR 包里没有“文件系统意义上的 app.properties”;仅限开发阶段快速验证。











