【问题标题】:When to use "getResourceAsStream" method?何时使用“getResourceAsStream”方法?
【发布时间】:2012-04-20 13:25:30
【问题描述】:

我对使用上述方法感到困惑,因为在加载某些属性文件时,人们采用了不同的方法......

Properties prop 
 = new Properties(new FileInputStream(new File("<path of the properties file>"));

很少有人使用..

Properties prop 
 = new Properties(getClass().getResourceAsStream("<path of the properties file>"));

什么时候用?

【问题讨论】:

标签: java properties


【解决方案1】:

getResourceAsStream 在您的类路径中搜索给定的文件/资源​​,它还可以从 JAR 中提供 InputStreams 的资源。

因此,如果您的属性存在于物理文件系统的某个文件夹中(例如用户文件夹,...),请使用 FileInputStream,并且如果文件嵌入在您的类路径中(例如,作为 JAR 中的资源),请使用 @987654324 @。

【讨论】:

    【解决方案2】:

    文件系统 读取文件时,请使用使用相对或绝对路径的 FileInputStream(File())。

    当您的程序作为 jar 分发并且您需要加载该 jar 中的文件时,您需要使用 getResourceAsStream(),它会在 classpath 中搜索该文件,然后path 是相对于类路径的。

    【讨论】:

      【解决方案3】:

      如果您 100% 确定文件位置不会因环境而改变,则可以使用第一种方法。这意味着有一个操作可以确保在所有环境中创建这些目录路径。另一方面,您可以灵活地更新属性文件,而无需打开 jar。

      当您从类路径中读取时,第二种方法非常便携。但它的缺点是每次属性更新都要重新打包 jar 文件。

      所以,这基本上取决于您的用例。

      【讨论】:

        【解决方案4】:

        当您从 Jar 中读取文件时。请使用类加载器的 getResource 或 getResoureAsstream。找到下面的代码 sn-p 从 Jar 中读取文件。上述方法无法从 jar 中读取文件。

            InputStream in = this.getClass().getClassLoader()
                    .getResourceAsStream("com/net/resources/config.properties");
        
            InputStream is = Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("com/net/resources/config.properties");
        
            URL url = this.getClass().getClassLoader()
                    .getResource("com/net/resources/config.properties");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-04
          • 2019-01-09
          • 2016-04-08
          • 2015-07-03
          相关资源
          最近更新 更多