Загрузите файл, расположенный внутри банки - PullRequest
3 голосов
/ 05 марта 2020

Я пытаюсь загрузить файл, расположенный внутри банки. Когда я загружаю файл нормально, он работает нормально (что ожидается, потому что файл находится в файловой системе), но когда я упаковываю банку с файлом, расположенным внутри, он не работает. Я пытался использовать:

this.getClass (). GetClassLoader (). GetResource ("big_bird.txt") // не работает

новый файл (" big_bird.txt ".toURI ()) // не работает

this.getClass (). getClassLoader (). getResourceAsStream (" big_bird.txt ") // вроде как работает, как я вижу путь, но Я не могу получить файл

Мне нужно иметь возможность захватить файл и загрузить его, пока он находится внутри банки, поэтому кто-нибудь может дать мне некоторое представление о том, как это можно сделать?

1 Ответ

1 голос
/ 05 марта 2020
  1. Считать файл как поток из банки

InputStream in = getClass().getResourceAsStream("big_bird.txt");

Создать временный файл

File tempFile = File.createTempFile("big_bird", "txt");

Запись входного потока во временный файл
try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
    int read;
    byte[] bytes = new byte[1024];
    while ((read = in.read(bytes)) != -1) {
        outputStream.write(bytes, 0, read);
    }
}
Теперь вы можете использовать / загрузить tempFile
...