Java 專案讀取 resource 資原始檔路徑問題

HuDu發表於2020-07-25

問題

正常在 Java 工程中讀取某路徑下的檔案時,可以採用絕對路徑和相對路徑,絕對路徑沒什麼好說的,相對路徑即相對當前類的路徑。

本地讀取資原始檔

採用檔案(File方式進行讀取)

public void test1() throws IOException {
        File file = new File("src/main/resources/database.properties");
        byte[] bytes = new byte[1024];
        StringBuffer sb = new StringBuffer();
        int byteread = 0;
        FileInputStream fis = new FileInputStream(file);
        while ((byteread = fis.read(bytes)) != -1){
            String s = new String(bytes, 0, byteread);
            sb.append(s);
        }
        System.out.println(sb);
    }

伺服器讀取資源

方式一

採用流(Stream)的方式讀取,並通過JDK中Properties類載入,可以方便的獲取到配置檔案中的資訊

public void test3() throws IOException {
//        this.getClass() = test.class
        //採用ClassLoader物件去載入資原始檔
        InputStream in1 = this.getClass().getClassLoader().getResourceAsStream("database.properties");

        //採用Class物件去載入
//        InputStream in3 = this.getClass().getResourceAsStream("/resources/database.properties");
        Properties properties = new Properties();
        properties.load(in1);
        String driver = properties.getProperty("driver");
        System.out.println(driver);
    }

採用Spring註解

如果工程中使用Spring,可以通過註解的方式獲取配置資訊,但需要將配置檔案放到Spring配置檔案中掃描後,才能將配置資訊放入上下文。

 <context:component-scan base-package="com.xxxx.service"/>
 <context:property-placeholder location="classpath:properties/xxx.properties" ignore-unresolvable="true"/>

然後在程式中可以使用 @Value進行獲取properties檔案中的屬性值,如下:

 @Value("${xxxt.server}")
 private static String serverUrl;

採用Spring配置

也可以在Spring配置檔案中讀取屬性值,賦予類成員變數

<?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

      <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          <property name="location" value="classpath:properties/xxx.properties"/>
      </bean>

     <bean id="service" class="com.xxxx.service.ServiceImpl">         <property name="serverUrl" value="${xxxt.server}" />
     </bean>

 </beans>
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章