2013-12-16 8 views
1

Скажем, у меня есть экспортированный файл Jar на моем рабочем столе, а затем папка, к которой я хочу получить доступ, чтобы файл jar мог загружать файлы из него. Как я могу получить доступ к этой папке без жесткого кодирования пути?Java получить папку в том же каталоге, что и Jar

+0

Используйте тот же путь, что использовали для экспорта? –

+0

Вы хотите получить доступ к папке, в которой находится ваш Jar-файл? – dARKpRINCE

+0

Но пользователь может изменить путь. –

ответ

4

Смотрите здесь: https://stackoverflow.com/a/6849255/514463

Выберите один из классов, которые вы хотите в каталог, например: Тест:

String path = Test.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
String decodedPath = URLDecoder.decode(path, "UTF-8"); 
1

Если я четко понимаю, вы можете использовать относительный путь при попытке доступа к папке. Например, если вы запускаете банку как отдельное приложение, относительный путь «.» будет папкой, содержащей вашу банку. Итак, когда вы поместите файл names.txt рядом с банкой, вы можете получить доступ к нему:

new File("./names.txt"); 

Надежда Я понял вас правильный путь, и это поможет.

0
File f = new File("Folder") 

Этот объект File указывает на папку «Folder» в рабочем каталоге Jar.

0

Следующий код должен предоставить каталог, содержащий файл JAR:

URL url = getClass().getProtectionDomain().getCodeSource().getLocation(); 
File directory = new File(url.toURI()).getParentFile(); 
0

Хммм ...

Я слышал этот вопрос так часто, и это всегда сводится к следующему: как загрузить ресурсы во время выполнения?

Основная причина этого вопроса заключается в том, что разрабатывается приложение и теперь он хочет создать дистрибутивный пакет. Обычно это заканчивается примерно так:

.../my-application-folder 
     | -- lib/*.jar 
     | -- main.jar 
     | -- config.properties 

Может быть несколько конфигурационных файлов. Конфигурация самого приложения, конфигурация используемой рамки ведения журнала и т. Д. Это не имеет значения. Если вы хотите получить доступ к таким ресурсам, вы должны сделать это в два этапа:

1) Убедитесь, что все папки, содержащие ваши ресурсы (такие файлы конфигурации являются ресурсами), являются частью пути к классам. Если вы запустите свой JAR-файл (здесь main.jar) с помощью команды java -jar main.jar, этот JAR-файл должен содержать файл манифеста, содержащий каталог ., и все необходимые библиотеки JAR в записи класса. [Альтернатива: Возможно, все ваши файлы конфигурации находятся в конфиге/подпапке. Тогда эта папка должна быть частью классового пути]

2) Внутри приложения вы доступ к этим ресурсам с загрузчиком класса:.

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL url = loader.getResource(neededResource); 
// do something with url, e.g. open stream, read from it, and close stream 

Если у вас есть пользовательский настраиваемый путь, есть несколько возможностей , Вы могли бы, например, передать системное свойство в приложение, как сказал Редди в своем комментарии. Вы также можете иметь свойство в файле конфигурации, который вы загружаете в начальной части вашего приложения. Однако у вас есть путь к этой настраиваемой папке в руке (во время выполнения). Затем вы делаете следующее:

String customizablePath = getCustomizablePath(); 
URL customizablePathURL = new File(customizablePath).toURI().toURL(); 
ClassLoader loader = new URLClassLoader(new URL[] {customizablePathURL}); 

Тогда вы можете продолжить, как указано выше.

Смежные вопросы