Вот способ сделать это:
Я бы создал Map
для каждого типа ресурса, и это будет отображение в форме: folder/with/resource.ext
->
uri:///actual/path/to/folder/with/resource.ext
, где folder
- это папка внутри вашего resources
. В вашем случае folder
может быть чем-то вроде levels
.
Теперь в вашем коде создайте эти структуры и поместите их где-нибудь, чтобы их нельзя было изменить
public static final Map<String, URI> IMAGE_RESOURCES = Collections.unmodifiableMap(loadAllResources("images"));
public static final Map<String, URI> PATH_RESOURCES = Collections.unmodifiableMap(loadAllResources("levels"));
Теперь мы определим функция, которая загружает все ресурсы из заданной папки и делает их доступными для легкого доступа.
private static Map<String, URI> loadAllResources(String folder) {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL folderUrl = loader.getResource(folder);
final Path root = Paths.get(folderUrl.toURI()).getParent();
return Files.walk(Paths.get(folderUrl.toURI()))
.filter(Files::isRegularFile)
.collect(Collectors.toMap((p)-> root.relativize(p).toString(), Path::toUri));
}
Теперь предположим следующую структуру папок в папке resources
:
.
├── images
│ ├── foo.png
│ └── bear.png
└── levels
└── level1_path.txt
Вы можете загрузить файл level1_path.txt
, выполнив:
new File(PATH_RESOURCES.get("levels/level1_path.txt"));
Список литературы: