Получение .java из имени пакета - PullRequest
0 голосов
/ 12 ноября 2010

Я использую QDox для разбора исходных текстов Java.У меня проблема с этим интерфейсом:

import test.Word;

public interface Spellable {
    /**
    * Checks the spell of the word in a given language
    */
    public boolean checkSpell (Word word);  
}

В момент разбора типа Word мне нужно знать, где находится путь в файловой системе.Итак, есть ли способ узнать это? Может быть, используя classpath?

1 Ответ

0 голосов
/ 12 ноября 2010

Я не думаю, что это можно сделать приятным, на 100% бесконечно совместимым способом. Java на самом деле пытается отвлечь вас от файловой системы с помощью механизма classpath.

Тем не менее, вы обычно можете получить путь к файлу через загрузчик классов. Первый шаг - получить ссылку на загрузчик классов, который может найти любой интересующий вас ресурс (обычно загрузчик классов для любого из ваших собственных классов будет работать нормально; если у вас более сложный сценарий, вы должны знать, какой загрузчик классов использовать) .

Затем вы можете запросить у загрузчика классов местоположение данного ресурса в виде URL, например:

final ClassLoader loader = getClass().getClassLoader();
final URL resourceLocation = loader.getResource("com/mycomp/coolapp/checkthis.doc");

Теперь, если вам повезет, URL будет использовать протокол file:/ и будет описывать местоположение в вашей локальной файловой системе. Если это так, вы можете извлечь этот путь и использовать его в качестве расположения файловой системы любого ресурса classpath, который вы только что искали. Если это не ресурс file:/, класс может даже не существовать на вашем локальном компьютере (например, он загружается удаленно через RMI), поэтому в любом случае вам не повезло.

Если это звучит сложно - возможно, вы можете передать рабочий каталог как системное свойство из вашего скрипта запуска Java (например, java ... -Dworking.dir=$(pwd)).

...