최근 개발에서는 springboot가 파일을 jar 패키지로 패키징한 후 파일을 읽을 수 없는 상황이 있습니다. 파일의 가상 경로가 유효하지 않으며 스트림을 통해서만 액세스할 수 있습니다.
public void test() { List<String> names = new ArrayList<>(); InputStreamReader read = null; try { ClassPathResource resource = new ClassPathResource("name.txt"); InputStream inputStream = resource.getInputStream(); read = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(read); String txt = null; while ((txt = bufferedReader.readLine()) != null) { if (StringUtils.isNotBlank(txt)) { names.add(txt); } } } catch (Exception e) { e.printStackTrace(); } finally { if (read != null) { try { read.close(); } catch (IOException e) { e.printStackTrace(); } } } }
보통 스프링 부트 프로젝트를 작성할 때 백그라운드에서 클래스 경로 아래에 있는 파일을 사용하는 경우가 있습니다. , 우리는 이렇습니다. Written by
File file = ResourceUtils.getFile("classpath:static/image/image");
이 경우에는 문제가 없었을 것입니다. 그러나 jar 패키지를 실행한 후에는 파일을 찾을 수 없습니다.
Resource 아래의 파일은 jar 파일에 존재합니다. 디스크에는 실제 경로가 없습니다. 실제로는 jar 내부의 경로입니다. 따라서 ResourceUtils.getFile 또는 this.getClass().getResource("") 메소드를 통해 파일을 올바르게 얻을 수 없습니다.
이런 상황에서는. 프로젝트 문서가 프로젝트 외부에 배치되는 경우가 있는데 실수로 이러한 것들을 삭제하기 쉽습니다.
ClassPathResource cpr = new ClassPathResource("static/image/image/kpg"); InputStream in = cpr.getInputStream();
public class ResourceRenderer { public static InputStream resourceLoader(String fileFullPath) throws IOException { ResourceLoader resourceLoader = new DefaultResourceLoader(); return resourceLoader.getResource(fileFullPath).getInputStream(); } }
Usage
InputStream in = ResourceRenderer.resourceLoader("classpath:static/image/image");
이는 jar 패키지에서 접근할 수 없는 경로 문제를 완벽하게 해결합니다.
위 내용은 springboot가 파일을 jar 패키지로 읽은 후 파일에 액세스할 수 없는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!