Przede wszystkim chcę powiedzieć, że niektóre z zamieszczonych wcześniej odpowiedzi są całkowicie poprawne, ale chcę je podać, ponieważ czasami nie możemy korzystać z bibliotek open source na licencji GPL, lub dlatego, że jesteśmy zbyt leniwi, aby pobrać słoik XD lub jakikolwiek twój powód jest tutaj, to samodzielne rozwiązanie.
Poniższa funkcja kopiowania zasobów obok pliku JAR:
/**
* Export a resource embedded into a Jar file to the local file path.
*
* @param resourceName ie.: "/SmartLibrary.dll"
* @return The path to the exported resource
* @throws Exception
*/
static public String ExportResource(String resourceName) throws Exception {
InputStream stream = null;
OutputStream resStreamOut = null;
String jarFolder;
try {
stream = ExecutingClass.class.getResourceAsStream(resourceName);//note that each/is a directory down in the "jar tree" been the jar the root of the tree
if(stream == null) {
throw new Exception("Cannot get resource \"" + resourceName + "\" from Jar file.");
}
int readBytes;
byte[] buffer = new byte[4096];
jarFolder = new File(ExecutingClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParentFile().getPath().replace('\\', '/');
resStreamOut = new FileOutputStream(jarFolder + resourceName);
while ((readBytes = stream.read(buffer)) > 0) {
resStreamOut.write(buffer, 0, readBytes);
}
} catch (Exception ex) {
throw ex;
} finally {
stream.close();
resStreamOut.close();
}
return jarFolder + resourceName;
}
wystarczy zmienić ExecutingClass nazwy swojej klasie, i nazywają to tak:
String fullPath = ExportResource("/myresource.ext");
pokazać nam to, czego próbowałem. –
Czy musisz to programować? Jeśli nie, możesz zmienić nazwę pliku 'Foo.jar' na' Foo.zip' i rozpakować go normalnie. – Jeffrey
@Jeffrey Tak, robię – jtl999