Относительный путь Java для папки, не работающий с файлом

Я использую Mac, и я новичок в нем. Вот мой вопрос:

Есть папка, которую мне нужно включить как объект File в Java. Когда я пробую это:

File firefoxProfileFolder = new File("/Users/prime/work/dmall/selenium/src/test/resources/firefoxprofile");

Работает нормально. Этот код находится в файле: /Users/prime/work/dmall/selenium/src/test/java/com/dmall/utils/WebUtil.java

Но когда я пробую это:

File firefoxProfileFolder = new File("../../../../resources/firefoxprofile");

Не могу загрузить папку. Таким образом, относительный путь от этого файла к этой папке, похоже, не работает. Так что я должен делать? Что я делаю не так?

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


person Koray Tugay    schedule 28.01.2013    source источник
comment
Этот .java файл будет скомпилирован в .class и запущен откуда-то еще.   -  person S.D.    schedule 28.01.2013
comment
Выложите, пожалуйста, приблизительную схему структуры каталогов.   -  person TechSpellBound    schedule 28.01.2013
comment
@Singularity Итак, что мне делать?   -  person Koray Tugay    schedule 28.01.2013
comment
Вы не можете получить ресурс просто на основе иерархии пакетов вашего исходного файла Java, однако вы можете получить ресурс во время выполнения через Classloader. см. это: stackoverflow.com/questions/9111484 /   -  person Gavin Xiong    schedule 28.01.2013
comment
@GavinXiong Но это не файл свойств, это папка?   -  person Koray Tugay    schedule 28.01.2013
comment
@KorayTugay При запуске java-приложения выполняется команда java <class>, текущий каталог этой командной оболочки будет ./ для процесса приложения. Но все же жестко запрограммированные относительные пути никуда не годятся.   -  person S.D.    schedule 28.01.2013


Ответы (4)


Вы можете получить каталог во время выполнения:

URL url = ClassLoader.getSystemResource("relative to/classpath/resources/firefoxprofile");
File file = new File(url.getFile()); // the directory
....    
person Gavin Xiong    schedule 28.01.2013
comment
Мне не нужен txt файл, мне нужна сама папка. - person Koray Tugay; 28.01.2013
comment
Спасибо. Ясно. Должен ли я действительно использовать строку относительно / classpath / resources ... в качестве параметра метода? Это не работает.. - person Koray Tugay; 28.01.2013
comment
@KorayTugay Нет, это просто пример, в зависимости от структуры вашего пакета. Примечательно, что если вы используете maven, папка src / test / resources не будет традиционно упаковываться во время выполнения, вам следует поместить свои ресурсы в src / main / resources. - person Gavin Xiong; 28.01.2013

Скорее всего, вы ошиблись в относительном пути. Он должен работать.

Для проверки вы можете создать новый тестовый каталог с помощью new File('testDir').mkdirs() и посмотреть, где Java создаст этот каталог. Будет ли оно в ожидаемом месте или где-то еще?

person Andremoniy    schedule 28.01.2013
comment
Привет, я предполагаю, что относительный путь правильный, но это не работает. - person Koray Tugay; 28.01.2013
comment
Не догадываться, вам следует проверить это с помощью указанного метода, чтобы быть уверенным. - person Andremoniy; 28.01.2013

Вы можете использовать firefoxProfileFolder.getCanonicalPath () и проверить, совпадает ли он с путем String s = new File ("/ Users / prime / work / dmall / selenium / src / test / resources / firefoxprofile"). GetCanonicalPath (); < br> Если это не тот же путь, ваш относительный путь неверен ...

person redc0w    schedule 28.01.2013

На самом деле вам нужно использовать путь к каталогу с учетом текущего каталога сценария запуска. Т.е. ваш корневой каталог - это каталог этого сценария.

person Andrey Atapin    schedule 28.01.2013