Создайте объект файла из пути ресурса к изображению в файле jar - PullRequest
4 голосов
/ 04 января 2011

Мне нужно создать объект File из пути к файлу изображения, который содержится в файле jar после создания файла jar. Если попытался использовать:

URL url = getClass().getResource("/resources/images/image.jpg");
File imageFile = new File(url.toURI());

но это не работает. Кто-нибудь знает другой способ сделать это?

Ответы [ 4 ]

5 голосов
/ 09 апреля 2012

Чтобы создать файл на Android из ресурса или необработанного файла, я делаю это:

try{
  InputStream inputStream = getResources().openRawResource(R.raw.some_file);
  File tempFile = File.createTempFile("pre", "suf");
  copyFile(inputStream, new FileOutputStream(tempFile));

  // Now some_file is tempFile .. do what you like
} catch (IOException e) {
  throw new RuntimeException("Can't create temp file ", e);
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}
  • Не забудьте закрыть свои потоки и т. Д.
3 голосов
/ 04 января 2011

Это должно работать.

String imgName = "/resources/images/image.jpg";
InputStream in = getClass().getResourceAsStream(imgName);
ImageIcon img = new ImageIcon(ImageIO.read(in));
2 голосов
/ 04 января 2011

Обычно вы не можете напрямую получить объект java.io.File, поскольку в сжатом архиве нет физического файла для записи. Либо вы живете с потоком (что в большинстве случаев лучше всего, поскольку каждый хороший API может работать с потоками), либо вы можете создать временный файл:

    URL imageResource = getClass().getResource("image.gif");
    File imageFile = File.createTempFile(
            FilenameUtils.getBaseName(imageResource.getFile()),
            FilenameUtils.getExtension(imageResource.getFile()));
    IOUtils.copy(imageResource.openStream(),
            FileUtils.openOutputStream(imageFile));
1 голос
/ 04 января 2011

Вы не можете создать объект File для ссылки внутри архива. Если вам абсолютно необходим объект File, вам необходимо сначала извлечь файл во временную папку. С другой стороны, большинство хороших API также используют поток ввода, который вы можете получить для файла в архиве.

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