Ошибка каталога файлов при развертывании JAR - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь получить имена всех файлов в папке «clock», которая находится внутри рабочего каталога «src».

Фрагмент ниже работает нормально, если я его запускаю, но когда я собираю JAR-файл и запускаю его, я получаю нулевую ошибку.

try {
  File directory = new File("src/clock/");
  File[] files = directory.listFiles();

  for (File f: files) {
    text.appendText(f.getName() + " ");
  }
} catch (Exception e) {
  text.appendText(e.getMessage() + " ");
}

Структура файла:

enter image description here

Обновление: (I 'м теперь использую ResourceAsStream, но та же проблема работает нормально, развернутый JAR не работает)

public void setImage() {

  List<String>fn;
  try {
    fn = getResourceFiles("/clock/graphics/backgrounds/");
    for (String s: fn) {
      text.appendText(s);

    }
  } catch (Exception e) {
    label.setText(e.getMessage());
  }
}


private 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);

  return in == null ? getClass().getResourceAsStream(resource) : in ;
}

private ClassLoader getContextClassLoader() {
  return Thread.currentThread().getContextClassLoader();
}

1 Ответ

0 голосов
/ 26 августа 2018

Это потому, что поиск файлов в

/path/to/your/application.jar 

Какой файл нельзя распаковать, чтобы найти файлы по указанному пути. Он считает application.jar именем папки и пытается его прочитать.

Вместо этого используйте

ClassLoader classLoader = YourClassName.class.getClassLoader();
InputStream sam = classLoader.getResourceAsStream(fileName);

для чтения файла из ресурсов папки проекта, когда вы хотите, чтобы ваш jar прочитал файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...