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

pbossiut  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(417)

我在列表中列出了一些文件名及其图标(如windows资源管理器中的图标) JTable . 如果我有一个图标,我知道获取图标的两种方法 File 来自本地文件系统的对象:

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

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

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

因为我的文件存储在数据库中,所以我没有 File 对象我的解决方法是创建一个具有特定文件扩展名的临时文件,使用上述两种方法之一并缓存图标以在cellrenderer中显示它。
我搜索了一个没有临时文件的解决方案,发现了两个我都不喜欢的解决方案: org.eclipse.swt.program.Program.findProgram(String extension).getImageData() ,但我不想使用swt org.jdesktop.jdic.icons.IconService 来自jdic项目的孵化器。上的最后更改 IconService 是6年前的事了,2年前在jdic上,我找不到可下载的jar。
还有别的解决办法吗?

x759pob2

x759pob21#

看起来您已经找到了实现此功能的方法,除非您想深入了解本机库等。
filesystemview在内部使用win32shellfolder,因此它们基本相同。
我还为org.eclipse.swt.program.program和org.eclipse.swt.internal.win32.os挖掘了源代码。然后,os类对图标使用本机调用。在这一点上,除非你真的不能创建一个临时文件,否则我不会走这条路。
对于jdic,我只找到了http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/wintrayiconservice.java.htm 通过一点挖掘(可能没有关联,但与icony有关:d)。也叫本地人。

sbdsn5lh

sbdsn5lh2#

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

相关问题