在Spring讀取src/main/resources
下的檔案的方式如下。
src/main/resources
為Spring專案預設的靜態資源路徑,與src/main/java
一樣都是classpath根目錄,可以透過@Value
注入,ResourceLoader
或ClassPathResource
取得目錄下的檔案。
例如下面是Spring Boot專案的Controller類別,getSpringImage()
為取得src/main/resources/static
路徑下的spring.png
圖檔的方法,分別用了上述各種方法取得src/main/resources/static/spring.png
圖片檔案。
DemoController.java
package com.abc.demo.controller;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@RestController
public class DemoController {
@Value("classpath:static/spring.png")
private Resource resource;
@Autowired
private ResourceLoader resourceLoader;
@GetMapping(value="/spring", produces = MediaType.IMAGE_JPEG_VALUE)
public byte[] getSpringImage() throws IOException {
byte[] bytes = null;
bytes = getResourceFileBytesByResource();
// bytes = getResourceFileBytesByResourceLoader();
// bytes = getResourceFileBytesByClassPathResource();
return bytes;
}
private byte[] getResourceFileBytesByResource() throws IOException {
File file = resource.getFile();
printFileInfo(File file);
InputStream in = resource.getInputStream();
return IOUtils.toByteArray(in);
}
private byte[] getResourceFileBytesByResourceLoader() throws IOException {
Resource resource = resourceLoader.getResource("classpath:static/spring.png"); // 取得src/main/resources/static/spring.png的Resource
File file = resource.getFile();
printFileInfo(File file);
InputStream in = resource.getInputStream();
return IOUtils.toByteArray(in);
}
private byte[] getResourceFileBytesByClassPathResource() throws IOException {
Resource resource = new ClassPathResource("static/spring.png"); // 取得src/main/resources/static/spring.png的Resource
File file = resource.getFile();
printFileInfo(File file);
InputStream in = resource.getInputStream();
return IOUtils.toByteArray(in);
}
private void printFileInfo(File file) {
System.out.println(file.getName()); // spring.png (檔案名稱)
System.out.println(file.getPath()); // /Users/.../workspace/demo/target/classes/static/spring.png (檔案系統的路徑)
System.out.println(file.length()); // 21113 (檔案大小21113bytes)
}
}
ClassPathResource(String path)
建構式的path
參數為以classpath為根的資源路徑位置。
參考:
沒有留言:
張貼留言