public Icon getFileIcon(AbstractFile originalFile, Dimension preferredResolution) { // Specified file is a LocalFile or a ProxyFile proxying a LocalFile (e.g. an archive file): // let's simply get // the icon using #getLocalFileIcon(LocalFile) AbstractFile topFile = originalFile.getTopAncestor(); Icon icon; if (topFile instanceof LocalFile) { icon = getLocalFileIcon((LocalFile) topFile, originalFile, preferredResolution); } // File is a remote file: create a temporary local file (or directory) with the same extension // to grab the icon // and then delete the file. This operation is I/O bound and thus expensive, so an LRU is used // to cache // frequently-accessed file extensions. else { // create the temporary, local file LocalFile tempFile = createTempLocalFile(topFile); if (tempFile == null) { // No temp file, no icon! return null; } // Get the file icon icon = getLocalFileIcon(tempFile, originalFile, preferredResolution); // Delete the temporary file try { tempFile.delete(); } catch (IOException e) { // Not much to do } } return icon; }