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
요청된 리소스 이름에 따라 데이터를 즉시 생성할 수 있습니다.예를 들어,ClassLoader
API(기본적으로 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
'programing' 카테고리의 다른 글
사전의 문자열 표현을 사전으로 변환 (0) | 2022.09.19 |
---|---|
로컬 컴퓨터의 PHP 서버를 선택하십시오. (0) | 2022.09.19 |
HTML 콘텐츠에서 스크립트 태그 제거 (0) | 2022.09.19 |
NumPy 어레이는 JSON을 직렬화할 수 없습니다. (0) | 2022.09.19 |
MySQL, NULL 또는 빈 문자열을 삽입하시겠습니까? (0) | 2022.09.06 |