1. 程式人生 > 實用技巧 >java(包括springboot)讀取resources下檔案方式

java(包括springboot)讀取resources下檔案方式

1、使用專案內路徑讀取,該路徑只在開發工具中顯示,類似:src/main/resources/resource.properties。只能在開發工具中使用,部署之後無法讀取。

  File file = new File("src/main/resources/resource.properties");

  @Test public void testReadFile2() throws IOException { File file = new File("src/main/resources/resource.properties"); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String data = null; while((data = br.readLine()) != null) { System.out.println(data); }

    br.close();
    isr.close();
    fis.close();
}

2、使用org.springframework.util.ResourceUtils,讀取。在linux環境中無法讀取。

File file = ResourceUtils.getFile("classpath:resource.properties"); FileInputStream fis = new FileInputStream(file);

@Test
public void testReadFile3() throws IOException {
    File file = ResourceUtils.getFile("classpath:resource.properties");
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(isr);
    String data = null;
    while((data = br.readLine()) != null) {
        System.out.println(data);
    }
    
    br.close();
    isr.close();
    fis.close();
}

3、使用org.springframework.core.io.ClassPathResource,各種環境都能讀取。

Resource resource = new ClassPathResource("resource.properties"); InputStream is = resource.getInputStream();

@Test
public void testReadFile() throws IOException {

// ClassPathResource classPathResource = new ClassPathResource("resource.properties"); Resource resource = new ClassPathResource("resource.properties"); InputStream is = resource.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String data = null; while((data = br.readLine()) != null) { System.out.println(data); }

    br.close();
    isr.close();
    is.close();
}

4、結合spring註解,使用org.springframework.core.io.ResourceLoader;類的註解。

package com.tsinkai.ettp;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;

import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class) @SpringBootTest public class EttpCustomApplicationTests {

@Autowired
ResourceLoader resourceLoader;


@Test
public void testReaderFile() throws IOException {
    Resource resource = resourceLoader.getResource("classpath:resource.properties");
    InputStream is = resource.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String data = null;
    while((data = br.readLine()) != null) {
        System.out.println(data);
    }
    
    br.close();
    isr.close();
    is.close();
}

} 5、結合springboot註解,自定義一個資源類,可以使用get/set方式讀取單個屬性。

需要根據具體資原始檔內容建立資源類,和對應屬性

resource.properties內容

com.tsinkai.ettp.name=imooc com.tsinkai.ettp.website=www.imooc.com com.tsinkai.ettp.language=java 資源類:

package com.imooc.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource;

@Configuration @ConfigurationProperties(prefix="com.imooc.opensource")//屬性字首 @PropertySource(value="classpath:resource.properties")//檔案路徑 public class Resource { private String name; private String website; private String language;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getWebsite() {
    return website;
}
public void setWebsite(String website) {
    this.website = website;
}
public String getLanguage() {
    return language;
}
public void setLanguage(String language) {
    this.language = language;
}

} 呼叫方式:

package com.tsinkai.ettp;

import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;

import com.tsinkai.ettp.common.Resource;

@RunWith(SpringRunner.class) @SpringBootTest public class EttpCustomApplicationTests {

@Autowired
Resource customResource;

@Test
public void readResource() {
    Resource bean = new Resource();
    BeanUtils.copyProperties(customResource, bean);
    System.out.println(bean.getName());
}

}