파일로서의 Java 자원
Java에서 클래스 로더를 통해 jar에서 검색 된 리소스에 File 인스턴스를 구성하는 방법이 있습니까?
내 응용 프로그램은 jar (기본값) 또는 런타임 (사용자 입력)에 지정된 파일 시스템 디렉토리의 일부 파일을 사용합니다. 나는
a)이 파일을 스트림으로로드하는
b) 사용자 정의 디렉토리의 파일 또는 jar의 디렉토리를 각각 나열 하는 일관된 방법을 찾고 있습니다.
편집 : 분명히 이상적인 접근 방식은 java.io.File에서 멀리 떨어져있는 것입니다. 클래스 경로에서 디렉토리를로드하고 그 내용 (파일 / 엔티티 포함)을 나열하는 방법이 있습니까?
ClassLoader.getResourceAsStream
그리고 Class.getResourceAsStream
확실히 리소스 데이터를로드하기 위해 이동하는 방법입니다. 그러나 클래스 경로 요소의 내용을 "목록"하는 방법이 없다고 생각합니다.
어떤 경우에는이 단순히 불가능할 수있다 - 예를 들면,이 ClassLoader
수 는 요구 무슨 자원 이름을 기반으로, 실시간으로 데이터를 생성합니다. 당신이 보면 ClassLoader
(클래스 패스 메커니즘을 통해 작동하는 무슨이 기본적으로있는) API 당신은 당신이 원하는 것을 무엇이든이없는 볼 수 있습니다.
실제로 jar 파일이 있다는 것을 알고 있다면 사용 가능한 파일 ZipInputStream
을 찾기 위해 파일을로드 할 수 있습니다. 디렉토리와 jar 파일에 대해 다른 코드가 있음을 의미합니다.
파일을 먼저 별도로 만드는 경우 사용 가능한 리소스 목록을 포함하는 일종의 매니페스트 파일을 포함시키는 것이 하나의 대안입니다. jar 파일에이를 번들로 묶거나 파일 시스템에 파일로 포함시키고 사용자에게 자원 선택을 제공하기 전에로드하십시오.
나는 같은 문제가 있었고 다음을 사용할 수있었습니다.
// 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()
여기 내 응용 프로그램 중 하나의 코드가 있습니다 ... 귀하의 요구에 맞는지 알려주십시오. 사용하려는 파일을 알고있는 경우 사용할 수 있습니다.
URL defaultImage = ClassA.class.getResource("/packageA/subPackage/image-name.png");
File imageFile = new File(defaultImage.toURI());
희망이 도움이됩니다.
jar에서 검색된 자원에 File 인스턴스를 구성하는 신뢰할 수있는 방법은 자원을 스트림으로 임시 파일에 복사하는 것입니다 (JVM이 종료 될 때 임시 파일이 삭제됨).
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;
}
}
이 시도:
ClassLoader.getResourceAsStream ("some/pkg/resource.properties");
사용 가능한 메소드가 더 있습니다 (예 : http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html).
이것은 하나의 옵션입니다 : http://www.uofr.net/~greg/java/get-resource-listing.html
참고 URL : https://stackoverflow.com/questions/676097/java-resource-as-file
'Programming' 카테고리의 다른 글
클래스 이름 또는 ID로 요소를 얻는 방법 (0) | 2020.07.15 |
---|---|
PHP curl에서 변수로 쿠키를 얻는 방법 (0) | 2020.07.15 |
Eclipse : 저장시 코드를 형식화 할 수 있습니까? (0) | 2020.07.15 |
인터페이스와 추상 클래스 (0) | 2020.07.15 |
사용자가 그룹의 구성원인지 테스트하기 위해 LDAP 쿼리를 작성하는 방법은 무엇입니까? (0) | 2020.07.15 |