Java эквивалент Ruby's __FILE__? - PullRequest
0 голосов
/ 03 июня 2009

В Ruby я часто использую File.dirname(__FILE__), чтобы открывать файлы конфигурации и тому подобное. Для тех, кто не знает Ruby, это даст расположение в файловой системе файла, из которого он вызывается. Это позволяет мне упаковывать библиотеки с данными и файлами конфигурации и открывать эти файлы с относительными путями.

Что такое Java-эквивалент? Если есть файл данных, который я хочу упаковать в банку, как открыть файл данных из кода Java, который также находится в банке?

Ответы [ 4 ]

7 голосов
/ 03 июня 2009

Эквивалентный API в Java: getResourceAsStream. Это откроет поток в файл, сохраненный в JAR относительно класса, для которого он вызывается.

Существуют варианты, например getResource, которые возвращают URL, или методы для ClassLoader, которые используют абсолютный путь внутри файла JAR.

1 голос
/ 03 июня 2009

См. Java-приложения и «Текущий каталог» :

В Java вы используете объекты File для построить относительный вид файла система. Два из конструкторов для объект File берут «родителя» аргумент, который указывает родительский путь это префикс к пути сам файл, чтобы создать полный абстрактный путь к файлу. Что ты делаешь создать объект File с путем который представляет ваш текущий каталог а затем создать все ваши файловые объекты используя этот объект File в качестве родителя. Вуаля, текущий каталог.

Также я бы рекомендовал Чтение и запись файла свойств :

// Read properties file.
Properties properties = new Properties();
try {
    properties.load(new FileInputStream("filename.properties"));
} catch (IOException e) {
}

// Write properties file.
try {
    properties.store(new FileOutputStream("filename.properties"), null);
} catch (IOException e) {
}
0 голосов
/ 03 июня 2009

если вы просто укажете имя файла, JVM будет искать этот файл в том же каталоге, в котором было запущено ваше приложение (не обязательно в том же каталоге, в котором находится ваше приложение).

0 голосов
/ 03 июня 2009

Я голосовал за @andrew, но я хотел бы отметить, что в Java каталог самого файла довольно бессмыслен, за исключением нескольких весьма рефлексивных (и, скорее всего, неправильных) целей.

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

В Java немного меньше рекламы, что позволяет сократить количество ярлыков, но обычно повышает согласованность и надежность во время развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...