Java-пакеты отражают структуру каталогов. Вы можете использовать класс File . В частности, см. Метод listFiles()
.
EDIT
Вы можете динамически находить место исполнения. Вот код из проекта, над которым я недавно работал; Я хотел найти каталог, из которого я запускаю JAR (если я запускаю JAR), или каталог из JAR, если я запускаю из файлов классов. В моем случае мой JAR находится в <project root>/bin
, а мои классы в <project root>/classes
.
final URL location;
final String classLocation = JavaPlanner.class.getName().replace('.', '/') + ".class";
final ClassLoader loader = JavaPlanner.class.getClassLoader();
if(loader == null)
{
try { throw new ClassNotFoundException("class loaded with bootstrap loader"); }
catch (ClassNotFoundException cnfe) { throw new InitializationException(cnfe); }
}
else
{
location = loader.getResource(classLocation);
}
if(location.toString().startsWith("file:/")) // Line 14
{
// Running from .class file
String path;
try { path = URLDecoder.decode(location.toString().substring(6), "UTF-8"); }
catch(UnsupportedEncodingException uee) { throw new InitializationException(uee); }
// Move up package folders to root, add /bin/
File package_ = new File(path).getParentFile();
binPath = package_.getParentFile().getParentFile().getParentFile().getParentFile() + File.separator + "bin" + File.separator;
}
else // Line 25
{
// Running from .jar file
String jarURL = JavaPlanner.class.getResource("/" + JavaPlanner.class.getName().replaceAll("\\.", "/") + ".class").toString();
jarURL = jarURL.substring(4).replaceFirst("/[^/]+\\.jar!.*$", "/");
try
{
File dir = new File(new URL(jarURL).toURI());
jarURL = dir.getAbsolutePath();
}
catch(MalformedURLException mue) { throw new InitializationException(mue); }
catch(URISyntaxException use) { throw new InitializationException(use); }
binPath = jarURL;
}
В строке 14 я обнаружил, что запускаю приложение из файла класса. String path
изначально задан путь к файлу JavaPlanner
(класс, содержащий мой метод main
). Я знаю, что структура пакета JavaPlanner
находится внутри, поэтому я использую getParentFile
соответствующее количество раз, чтобы найти корень проекта, а затем добавляю bin /.
В строке 25 я обнаружил, что запускаю приложение из JAR. Блок просто получает путь к папке, содержащей этот исполняемый файл JAR.
Очевидно, этот код не на 100% адаптирован к вашей цели (в частности, я звоню getParentFile
определенное количество раз для моей структуры пакета), но я думаю, что это должно помочь.
Цель всего вышеприведенного кода состояла в том, чтобы найти правильные файлы ресурсов для моего приложения. В рабочей версии пользователю будет доступен только JAR, но я не хотел пересобирать JAR каждый раз, когда мне нужно было протестировать некоторый код, и я не хотел дублировать мои файлы ресурсов, и Я не хотел загрязнять мою папку bin / файлами классов (потому что все в bin / предназначалось для отправки пользователю).