【问题标题】:How Or where Do I access my properties file如何或在哪里访问我的属性文件
【发布时间】:2026-02-20 14:15:02
【问题描述】:

我有一个属性文件 myprops.properties 如下:

Wsdl=someurl
UserName=user
UserPassword=pasword
Application=appName

在我的控制器内部,我试图访问我的服务中的设置值,如下所示

Properties prop = new Properties();
prop.load(new FileInputStream("resources/myprops.properties"));
myService.setWsdl(prop.getProperty("Wsdl"));
myService.setUserName(prop.getProperty("UserName"));
myService.setUserPassword(prop.getProperty("UserPassword"));
myService.setApplication(prop.getProperty("Application"));

我的问题是我只是不知道使用什么路径。如果这有什么不同的话,它是一个 Spring 项目。理想情况下,我希望将属性文件放在我的“src/main/resources”文件夹中

我意识到这对某些人来说可能非常简单,但我已尝试在此处和 Google 上搜索解决方案,但我似乎无法找到有用的解决方案。我尝试在项目中移动文件,但似乎无法弄清楚

我得到的错误是

java.io.FileNotFoundException: resources\drm.properties (The system cannot find the path specified) 

任何建议/解释,甚至是清楚解释它的链接都会很棒

【问题讨论】:

  • 您的属性文件包含无效语法。
  • 你的属性文件应该像Wsdl=someurl
  • 缺乏研究?几分钟后,我在 SO 中找到了几个答案。
  • @Jessemon 我找到了类似问题的答案,但没有一个对我有用或以我能理解的方式解释

标签: java spring


【解决方案1】:

好吧,src/main/resources 在类路径上,你只需要这样做。

Properties 属性 = PropertiesLoaderUtils.loadAllProperties("你的属性文件名");

【讨论】:

    【解决方案2】:

    如果你使用的是 spring,你可以设置你的属性占位符。

     <context:property-placeholder location="classpath:resources/myprops.properties" />
    

    在您的 bean 中,您可以使用 @Value 注释从属性中注入值

    @Autowired
    public Foo(@Value("${Wsdl}") String wsdl) {
       ...
    }
    

    在上面的例子中,我在构造函数中使用了,但它可以被 Autowired field/setter 使用。

    因此,在您的服务中,您可以拥有以下内容:

    @Service
    public class MyService {
         private final String wsdl;
         private final String username;
         private final String password;
         private final String application;
    
         @Autowired
         public MyService(
             @Value("${Wsdl}") String wsdl,
             @Value("${UserName}") String username,
             @Value("${UserPassword}") String password,
             @Value("${Application}") String application
             ) {
             // set it to each field.
         }
    }
    

    【讨论】:

    • 这花了我一段时间才弄清楚,但现在我绝对值得,而且比 Reimeus 的例子更合适,谢谢
    • 没问题,伙计;)很高兴我能帮上忙
    【解决方案3】:

    鉴于src/main/resources 在类路径中,您可以这样做:

    Resource resource = new ClassPathResource("/myprops.properties");
    Properties props = PropertiesLoaderUtils.loadProperties(resource);
    

    【讨论】:

    • 我仍然收到java.io.FileNotFoundException: class path resource [myprops.properties] cannot be opened because it does not exist
    【解决方案4】:

    不要使用FileInputStream;使用 getResourceAsStream() 从 servlet 上下文中读取它。

    【讨论】:

    • 我试过这个并得到java.lang.NullPointerException at java.util.Properties$LineReader.readLine
    • 您没有检查您返回的 InputStream 是否为空。可能是你给的路径不对。
    【解决方案5】: