Java: как получить миниатюру из файла

В проводнике Windows (и linux gnome) для каждого файла отображается миниатюра или значок . Как с EXE, изображениями, видео, txt файлами, ini файлами, документами Word и многими другими типами файлов. Теперь мой вопрос: есть ли способ получить (желательно большой) значок по файлу.

Что-то вроде:

public static BufferedImage getThumbnail(File file) {...}

Спасибо

Ответы

Ответ 1

Похоже, что AWT не делает этого.

Если вы используете Swing, есть метод, который вы можете использовать для получения Swing Icon...

import javax.swing.filechooser.FileSystemView;
import javax.swing.Icon;

...

Icon ico = FileSystemView.getFileSystemView().getSystemIcon(file);

Вы также можете преобразовать этот Icon обратно в Image (скорее всего, BufferedImage, но я его не тестировал):

Image image = ((ImageIcon) ico).getImage();

Существует также класс, чтобы получить значок напрямую, но этот класс зависит от JDK. В Sun JDK это класс sun.awt.shell.ShellFolder.

Если вы используете SWT, вещи немного сложнее.

Ответ 2

Я не думаю, что приведенные выше ответы касаются правильного вопроса. Martijn не просит API для манипулирования изображениями значков. Он хочет знать, как добраться до кэша рабочего стола эскизных изображений для элементов в просматриваемой файловой системе.

Я не думаю, что есть переносной способ сделать это вообще, но мир Linux (Gnome и KDE) придерживается стандарта миниатюр Freedesktop, который можно прочитать по адресу: http://jens.triq.net/thumbnail-spec/

Может быть код, возможно, в Gtk (но, вероятно, не Java), который реализует уровень совместимости для Windows, но я не знаю об этом, если есть.

Ответ 3

Если вы ищете независимое от платформы (т.е. чисто java) решение, рассмотрите JavaThumbnailer. Тем не менее он все еще бета-версии и имеет ограниченное количество поддерживаемых типов файлов.