IT Share you

InputStream을 FileInputStream으로 변환하는 방법

shareyou 2020. 12. 12. 12:42
반응형

InputStream을 FileInputStream으로 변환하는 방법


내 프로그램에 다음 줄이 있습니다.

InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name");

하지만 [Resource_InputStream]에서 FileInputStream을 어떻게 얻을 수 있습니까?


ClassLoader#getResource()URI가 유효한 로컬 디스크 파일 시스템 경로를 나타내는 경우 대신 사용하십시오 .

URL resource = classLoader.getResource("resource.ext");
File file = new File(resource.toURI());
FileInputStream input = new FileInputStream(file);
// ...

그렇지 않은 경우 (예 : JAR), 최선의 방법은 임시 파일에 복사하는 것입니다.

Path temp = Files.createTempFile("resource-", ".ext");
Files.copy(classLoader.getResourceAsStream("resource.ext"), temp, StandardCopyOption.REPLACE_EXISTING);
FileInputStream input = new FileInputStream(temp.toFile());
// ...

즉, 실제로 그렇게하면 어떤 이점도 보지 못하거나 .NET FileInputStream대신 필요한 도우미 클래스 / 메서드가 부족해야합니다 InputStream. 가능하면 API를 수정하여 InputStream대신 요청하십시오 . 타사 제품이라면 반드시 버그로 신고하세요. 이 특정 경우에는 해당 API의 나머지 부분에 물음표를 표시합니다.


간단히 말해서 FileInputStream 을 매개 변수 또는 변수 유형으로 사용하지 마십시오 . 추상 기본 클래스 (이 경우 InputStream 대신)를 사용하십시오.


다음과 같은 것이 필요합니다.

    URL resource = this.getClass().getResource("/path/to/resource.res");
    File is = null;
    try {
        is = new File(resource.toURI());
    } catch (URISyntaxException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        FileInputStream input = new FileInputStream(is);
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

그러나 실행 가능한 JAR이 아닌 IDE 내에서만 작동합니다. 나는 여기에 동일한 문제를 설명 했다 .

참고 URL : https://stackoverflow.com/questions/2353057/how-to-convert-inputstream-to-fileinputstream

반응형