programing

Java resource as File

firstcheck 2022. 9. 19. 21:12
반응형

Java resource as File

자바에서 construction을 할 수 있는 방법이 있나요?File클래스 로더를 통해 항아리에서 가져온 리소스 인스턴스

응용 프로그램은 jar(기본값) 또는 런타임에 지정된 파일 시스템 디렉토리의 일부 파일을 사용합니다(사용자 입력).나는 일관된 방법을 찾고 있다.
a) 이러한 파일을 스트림으로 로드합니다.
b) 사용자 정의 디렉토리 또는 jar 내의 디렉토리 각각에 파일을 나열합니다.

편집: 이상적인 접근법은 이 문제를 회피하는 것입니다.java.io.File다같이.classpath에서 디렉토리를 로드하여 그 내용(그 안에 포함된 파일/엔티티)을 나열하는 방법이 있습니까?

I had the same problem and was able to use the following:

// Load the directory as a resource
URL dir_url = ClassLoader.getSystemResource(dir_path);
// Turn the resource into a File object
File dir = new File(dir_url.toURI());
// List the directory
String files = dir.list()

ClassLoader.getResourceAsStream그리고.Class.getResourceAsStream리소스 데이터를 로드하는 방법은 분명합니다.단, 클래스 패스의 요소의 내용을 「리슨」할 수 있는 방법은 없습니다.

경우에 따라서는 이것이 단순히 불가능할 수 있습니다. 예를 들어,ClassLoader 요청된 리소스 이름에 따라 데이터를 즉시 생성할 수 있습니다.예를 들어,ClassLoaderAPI(기본적으로 classpath 메커니즘이 작동하는 것)는 원하는 작업을 수행할 수 있는 것이 없음을 알 수 있습니다.

만약 당신이 실제로 항아리 파일을 가지고 있다는 것을 안다면, 당신은 그것을 로딩 할 수 있습니다.ZipInputStream가능한 것을 찾아보세요.디렉토리와 jar 파일의 코드가 다르다는 것을 의미합니다.

One alternative, if the files are created separately first, is to include a sort of manifest file containing the list of available resources. Bundle that in the jar file or include it in the file system as a file, and load it before offering the user a choice of resources.

Here is a bit of code from one of my applications... Let me know if it suits your needs. You can use this if you know the file you want to use.

URL defaultImage = ClassA.class.getResource("/packageA/subPackage/image-name.png");
File imageFile = new File(defaultImage.toURI());

Hope that helps.

A reliable way to construct a File instance on a resource retrieved from a jar is it to copy the resource as a stream into a temporary File (the temp file will be deleted when the JVM exits):

public static File getResourceAsFile(String resourcePath) {
    try {
        InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(resourcePath);
        if (in == null) {
            return null;
        }

        File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp");
        tempFile.deleteOnExit();

        try (FileOutputStream out = new FileOutputStream(tempFile)) {
            //copy stream
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
        }
        return tempFile;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

Try this:

ClassLoader.getResourceAsStream ("some/pkg/resource.properties");

There are more methods available, e.g. see here: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html

이 옵션은 http://www.uofr.net/ ~greg/syslog/get-resource-syslog.syslog 입니다.

언급URL : https://stackoverflow.com/questions/676097/java-resource-as-file

반응형