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. Тем не менее он все еще бета-версии и имеет ограниченное количество поддерживаемых типов файлов.
Ответ 4
Не совсем уверен, что вы сможете получить значок, но посмотрите на AssociationService
, доступный с помощью JDIC.
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/jdic_assoc/
Также этот поток http://forums.sun.com/thread.jspa?threadID=5357995