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());
}
}