Да, вы должны извлечь ресурсы, которые вы хотите использовать. Другого пути нет. Это просто, когда вы знаете точный файл, который хотите использовать. Вы просто сохраняете его и после этого можете его использовать.
final InputStream directory = Main.class.getResourceAsStream("/images/name.jpg");
final byte[] buffer = new byte[directory.available()];
directory.read(buffer);
final File targetFile = new File("/tmp/target/name.jpg");
final OutputStream outStream = new FileOutputStream(targetFile);
outStream.write(buffer);
Это не так просто, когда вы хотите настроить таргетинг на каталог. Вы должны просмотреть все записи вашего банка и сохранить все те, которые вы хотите использовать. Тогда, как и в случае выше, они могут быть использованы. Что-то вроде следующего примера.
public class UnzipJar {
public static void main(String[] args) throws IOException {
final URL dirURL = UnzipJar.class.getResource("/images");
final String jarPath = dirURL.getPath().substring(5, dirURL.getPath().indexOf("!"));
extract("images", "/tmp/dest", jarPath);
}
public static void extract(final String source, final String destination, String jarPath) throws IOException {
final File file = new File(jarPath);
final JarFile jar = new JarFile(file);
for (final Enumeration<JarEntry> enums = jar.entries(); enums.hasMoreElements(); ) {
final JarEntry entry = enums.nextElement();
final String fileName = destination + File.separator + entry.getName();
final File f = new File(fileName);
if (fileName.startsWith(source) && !fileName.endsWith("/")) {
final InputStream is = jar.getInputStream(entry);
final FileOutputStream fos = new FileOutputStream(f);
while (is.available() > 0) {
fos.write(is.read());
}
fos.close();
is.close();
}
}
}
}