如何获取 java 中任何文件的 icon/image?

How to get the icon/image of any file in java?

我有一个 java.util.List 充满了 java.io.File 我不想在 gui 中列出它们。为了显示它们,我不想显示它们的名字,可以通过 java.io.File 的方法 getName() 访问它们。我想显示它们的 icon/image ,例如在桌面上显示它们。为了构建它,我使用了最新的 javaversion (Java8/1.8)。到目前为止,我找到了一种方法来获取任何文件的图像,如下所示:

Icon icon = FileSystemView.getFileSystemView().getSystemIcon(pFile);

问题在于,返回的图标分辨率非常小(16x16),我想以更大的尺寸显示它。 80x80 将是完美的,但不一定是它。 64x64 或类似的东西也可以。所以我设法调整图标大小并拉伸它,但是将 16x16 拉伸到 80x80 并不像您想象的那样酷。需要更少的像素才能获得好的结果。
我也找到了本教程,但本教程中显示的第一种方法不适用于 Java8:http://www.rgagnon.com/javadetails/java-0439.html 我现在使用的方法是从那里复制的。

那么有什么方法可以让特定文件的桌面上显示的图标更大一些吗?

谢谢
巴施迪

private BufferedImage getBufferedImage(final File pFile)
        throws FileNotFoundException {
    Image icon = ShellFolder.getShellFolder(pFile).getIcon(true);
    BufferedImage im = new BufferedImage(icon.getWidth(null),
            icon.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = im.createGraphics();
    g.drawImage(icon, 0, 0, null);
    g.dispose();
    int width = im.getWidth();
    int height = im.getHeight();
    System.out.println(width);
    System.out.println(height);
    final int maxHeigh = 79;
    double scaleValue = 0;
    if (height > width)
        scaleValue = maxHeigh / height;
    else
        scaleValue = maxHeigh / width;
    final int scaledWidth = (int) (im.getWidth() * scaleValue);
    final int scaledHeigh = (int) (im.getHeight() * scaleValue);
    BufferedImage resized = new BufferedImage(scaledWidth, scaledHeigh,
            im.getType());
    g = resized.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(im, 0, 0, scaledWidth, scaledHeigh, 0, 0, im.getWidth(),
            im.getHeight(), null);
    g.dispose();
    return resized;
}

我导入了 jdk7 并使用了 ShellFolder 的旧函数。工作正常,即使 运行 在 java8 上也是如此。感谢您的帮助:)

我创建了一个名为 JIconExtractReloaded 的库,它可以提取所有图标大小,而不仅仅是 32x32。这里是 link https://github.com/MrMarnic/JIconExtractReloaded.

随便写:

BufferedImage image = JIconExtract.getIconForFile(128,128,"C:\Windows\explorer.exe");

你有图标。