Java新手求助:如何打印setProperty设置的所有属性值
如何打印Properties中的所有属性到文件(Java新手指南)
Hey there! 作为Java新手,要把调试信息输出到文件排查问题完全没问题,我来帮你一步步搞定怎么打印loadPropFromObj方法里prop设置的所有属性值。
方法1:用Properties自带的store()方法直接写入文件
这是最简便的方式,Properties类本身提供了store()方法,可以直接把所有键值对写入文件,无需手动遍历。你只需要在方法返回prop之前,添加一段写入文件的代码:
import java.io.FileOutputStream; import java.io.IOException; public static Properties loadPropFromObj(DatabaseConfigInfo dbConfig) { Properties prop = new Properties(); System.out.println("INSIDE loadPropFromObj"); // 原有属性设置代码保持不变 prop.setProperty("dataSourceName" , dbConfig.getDataSourceName() ); prop.setProperty("DatabaseServerUrl" , dbConfig.getDbServerURL()); prop.setProperty("DatabaseDriverName" , dbConfig.getDbDriverName()); prop.setProperty("DatabaseServerName" , dbConfig.getDbServerName()); prop.setProperty("DatabaseName" , dbConfig.getDbName()); prop.setProperty("DatabaseUserName" , dbConfig.getDbUserName()); prop.setProperty("DatabasePassword" , dbConfig.getDbPassword().toString()); prop.setProperty("CrmDataSource" , dbConfig.getCrmDataSource()); prop.setProperty("InterfaceDataSource" , dbConfig.getInterfaceDataSource()); prop.setProperty("ProviderURL" , dbConfig.getProviderURL()); prop.setProperty("ContextFactory" , dbConfig.getContextFactory()); prop.setProperty("DatabaseMaxConnections" , dbConfig.getDbMaxConnections()); prop.setProperty("DatabaseExpirationTime" , dbConfig.getDbExpiryTime()); prop.setProperty("DatabaseRecycleTime" , dbConfig.getDbRecycleTime()); // --- 新增调试代码:将属性写入文件 --- try (FileOutputStream fos = new FileOutputStream("db_config_debug.txt")) { // 第二个参数是文件头部的注释,可自定义 prop.store(fos, "Debug: All Database Config Properties"); System.out.println("属性已成功写入db_config_debug.txt文件"); } catch (IOException e) { System.err.println("写入属性文件时出错: " + e.getMessage()); e.printStackTrace(); } // --- 调试代码结束 --- return prop; }
说明:
- 用
try-with-resources语法自动关闭输出流,避免资源泄漏。 - 运行后,文件会生成在当前工作目录(一般是项目根目录),如果找不到可以指定绝对路径,比如
"C:/temp/db_config_debug.txt"(Windows)或"/home/yourname/db_config_debug.txt"(Linux/Mac)。 - 文件内容会自动按键值对格式排列,清晰易读。
方法2:手动遍历属性,自定义格式输出到文件
如果想自己控制输出格式(比如对齐排版、添加额外说明),可以遍历所有属性键,逐个写入文件:
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.Set; public static Properties loadPropFromObj(DatabaseConfigInfo dbConfig) { Properties prop = new Properties(); System.out.println("INSIDE loadPropFromObj"); // 原有属性设置代码保持不变 prop.setProperty("dataSourceName" , dbConfig.getDataSourceName() ); prop.setProperty("DatabaseServerUrl" , dbConfig.getDbServerURL()); // ... 其他属性设置省略 // --- 新增调试代码:自定义格式写入文件 --- try (BufferedWriter writer = new BufferedWriter(new FileWriter("db_config_custom.txt"))) { writer.write("=== 数据库配置属性调试信息 ===\n"); // 获取所有属性的键集合 Set<String> propertyKeys = prop.stringPropertyNames(); for (String key : propertyKeys) { String value = prop.getProperty(key); // 用格式化字符串对齐键的长度,让输出更美观 writer.write(String.format("%-28s : %s\n", key, value)); } System.out.println("自定义格式的属性已写入db_config_custom.txt文件"); } catch (IOException e) { System.err.println("写入属性文件时出错: " + e.getMessage()); e.printStackTrace(); } // --- 调试代码结束 --- return prop; }
说明:
stringPropertyNames()方法会返回Properties中所有字符串类型的键,适合你这里的场景。String.format的%-28s表示左对齐,占28个字符宽度,让所有属性值的起始位置一致,阅读更方便。
额外小技巧:先在控制台验证输出
如果想先快速确认属性值是否正确,不用直接写文件,可以先用prop.list(System.out)打印到控制台:
// 在写入文件前,先在控制台打印确认 prop.list(System.out);
注意事项:
- 敏感信息:
DatabasePassword是敏感数据,调试完成后记得移除或注释掉调试代码,不要把包含密码的文件上传到公共仓库! - 异常处理:代码中添加了异常捕获,避免IO错误影响主逻辑的执行,同时打印错误信息方便排查问题。
内容的提问来源于stack exchange,提问作者Vishal5364
相关产品推荐
相关产品推荐

