ClassLoader.getResourceAsStream
и Class.getResourceAsStream
- определенно способ загрузки данных ресурса. Однако я не верю, что существует какой-либо способ «перечисления» содержимого элемента classpath.
В некоторых случаях это может быть просто невозможно - например, ClassLoader
может генерировать данные на лету, основываясь на том, какое имя ресурса запрашивается. Если вы посмотрите на ClassLoader
API (который в основном работает с механизмом classpath), вы увидите, что делать то, что вы хотите, нечего.
Если вы знаете, что на самом деле у вас есть файл jar, вы можете загрузить его с помощью ZipInputStream
, чтобы узнать, что доступно. Это будет означать, что у вас будет другой код для каталогов и файлов JAR.
Одна альтернатива, если файлы создаются в первую очередь отдельно, - включить файл манифеста своего рода, содержащий список доступных ресурсов. Объедините его в файл jar или включите в файловую систему как файл и загрузите его, прежде чем предлагать пользователю выбор ресурсов.