2009-09-30 134 views
14

在Windows资源管理器(和linux gnome)中为每个文件显示缩略图或图标。像EXE,图像,视频,txt文件,ini文件,Word文档和其他许多文件类型一样。现在是我的问题:有没有办法通过文件获得(最好是大)图标。Java:如何从文件中获取缩略图

喜欢的东西:

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

感谢

回答

12

它看起来像有这样做的没有AWT方式。

如果你使用的秋千,还有你可以用它来获得一个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,东西are a bit trickier

+1

这就是我想要的。谢谢,也许你也知道更大的图标的方式? – 2009-09-30 15:52:48

+1

是的,有没有办法让图标变大? 我想使用sun.awt.shell.ShellFolder.getIcon(true),但sun.awt.shell.ShellFolder具有访问限制。 :-( – 2009-10-08 12:19:50

0

不能完全确定,如果你能得到的图标,但看看AssociationService可访问使用JDIC。

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/jdic_assoc/

而且这个线程http://forums.sun.com/thread.jspa?threadID=5357995

+0

太阳线不再存在。 – koppor 2012-09-11 19:47:24

+0

可以在[archive.org]上查看java.sun.com链接(https://web.archive.org/web/20061030164547/http://java.sun.com/developer/technicalArticles/J2SE/Desktop/ jdic_assoc /),[在oracle.com上]有一个半可读的版本(http://www.oracle.com/technetwork/articles/java/jdic-assoc-136531.html)。不幸的是论坛链接没有被存档。 – VGR 2016-10-07 14:01:28

6

我不认为上面的答案是解决正确的问题。 Martijn并没有要求API来操作图标图像。他想知道如何访问可浏览文件系统中项目的缩略图图像的桌面缓存。

我不认为有一个可移植的方式来做到这一点在所有,但在Linux世界(Gnome和KDE)坚持其可以在读取Freedesktop的缩略图标:http://jens.triq.net/thumbnail-spec/

有可能是代码,也许在Gtk(但可能不是Java)中实现了Windows的兼容层,但如果存在的话,我不知道它。

3

如果您正在寻找不依赖plattform(即纯Java)解决方案,请致电JavaThumbnailer。尽管如此,它仍然是测试版,并且支持的文件类型数量有限。