Я уже прошу прощения за столь неточный титул, но эта проблема имеет
быть в особых обстоятельствах.
В настоящее время я пишу небольшую Sokoban-игру, и у меня есть несколько предустановленных игр в
различные .txt файлы. Эти файлы находятся в / resources / presets / * .txt в папке src. Поэтому, когда я создаю jar-файл, они также будут расположены здесь:
... / GameBox.jar! / Ресурсы / пресеты / *. TXT
Чтение уже известных текстовых файлов из этого пакета не проблема (я так делаю)
BufferedReader rd = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/presets/standard.txt")));
НО я хочу иметь список всех текстовых файлов в этом пакете, чтобы я мог переключаться между ними и добавлять новые, просто помещая их в папку.
Этот список текстовых файлов в пакете должен создаваться, когда программа запускается командой javac или из jar-файла.
Я посмотрел некоторые другие коды переполнения стека, вот такие:
List<String> getResourceFiles(String path) throws IOException{
List<String> filenames = new ArrayList<>();
try(InputStream in = getResourceAsStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
String resource;
while((resource=br.readLine())!=null){
filenames.add(resource);
}
}
return filenames;
}
private InputStream getResourceAsStream(String resource){
final InputStream in = getContextClassLoader().getResourceAsStream(resource);
System.out.println(in);
return in==null?getClass().getResourceAsStream(resource):in;
}
private ClassLoader getContextClassLoader() {
System.out.println(Thread.currentThread().getContextClassLoader());
return Thread.currentThread().getContextClassLoader();
}
и этот:
public static List<String> getFiles(String paths) {
List<String> filesList = new ArrayList<>();
List<File> files = new ArrayList<>();
for (final String path : paths.split(File.pathSeparator)) {
final File file = new File(path);
System.out.println(path);
if( file.isDirectory()) {
recurse(files, filesList, file);
}
else {
filesList.add(file.getName());
}
}
return filesList;
}
private static void recurse(List<File> filesList, List<String> files, File f) {
File list[] = f.listFiles();
for (File file : list) {
if (file.isDirectory()) {
recurse(filesList, files, file);
}
else {
filesList.add(file);
files.add(file.getName());
}
}
}
Оба эти двух разных подхода работают на выполнение программы с помощью команды javac, но ни один из них не работает, когда я создаю jar-файл и пытаюсь его запустить.
Я использую Intellij для кодирования и сборки файла JAR, если кто-то обеспокоен этим
PS: я не хочу использовать новые пакеты, такие как spring (например, PathMatchingResourcePatternResolver)