Если вы используете JDK 1.7 или JDK 1.8, вы можете использовать NIO.2 API.
for (FileSystemProvider provider : FileSystemProvider.installedProviders()) {
if ("jar".equals(provider.getScheme()))
return provider.newFileSystem((new File(Start.class
.getProtectionDomain().getCodeSource().getLocation().toURI()))
.toPath(), new HashMap<String, Object>());
}
Если вы введете этот код в метод, который возвращает java.nio.file.FileSystem, вы можете вызвать метод для получения FileSystem для файла JAR.
Чтобы получить путь для доступа к файлам внутри вашего JAR-файла, вы можете использовать следующий метод, который затем позволяет вам читать файлы, как вам захочется.
fileSystem.getPath("/images/image.gif")
Если вы хотите иметь возможность запускать это в Eclipse, убедитесь, что вы окружили вызов метода попыткой / перехватом IOException и присвойли своему объекту FileSystem следующее.
new File(Start.class.getProtectionDomain().getCodeSource().getLocation().toURI())
.toPath().toString();
Это позволит вам запустить вашу программу независимо от того, сжата она в файл JAR или нет.
Я рекомендую вам привыкнуть к использованию NIO.2, поскольку это очень мощный API.