如何在不创建临时文件的情况下获取文件扩展名或文件类型的图标?

2022-09-01 13:27:52

我在.我知道如果我有来自本地文件系统的对象,则有两种方法可以获取图标:JTableFile

javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon( file )

对于 16x16 图标或更大的图标:

sun.awt.shell.ShellFolder.getShellFolder( file ).getIcon( true ) )

由于我的文件存储在数据库中,因此我没有该对象。我的解决方法是创建一个具有特定文件扩展名的临时文件,使用上述两种方法之一并缓存图标以在CellRenderer中显示它。File

我搜索了一个没有临时文件的解决方案,发现了两个我不喜欢的解决方案:

  • org.eclipse.swt.program.Program.findProgram(String extension).getImageData(),但我不想使用 SWT
  • org.jdesktop.jdic.icons.IconService来自JDIC项目的孵化器。上一次更改是6年前,2年前在JDIC上,我找不到可下载的jar。IconService

还有其他解决方案吗?


答案 1

看起来你已经发现了做到这一点的方法,除非你想深入研究原生库等。

FileSystemView在内部使用Win32ShellFolder,因此它们基本上是相同的。

我还挖掘了org.eclipse.swt.program.Program的源代码,并随之挖掘了org.eclipse.swt.internal.win32.OS。然后,OS 类对 Icon 使用本机调用。在这一点上,除非你真的不能创建一个临时文件,否则我不会沿着这条路走下去。

对于JDIC,我只找到了 http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/WinTrayIconService.java.htm,有一点点挖掘(可能不相关,但:D做图标的事情)。还调用本机。


答案 2

您真的需要临时文件才能使用第一个选项吗?文件不必表示实际存在的文件...