Ein File ist nix anderes als ein Pfad. Das kann ein Verzeichnis oder eine Datei sein (darüber gibs aber bei sun auch schon diskusionen um das zu ändern). Ob die Datei/Verzeichnis nun existiert auf dem Dateisystem, ist dem File-Objekt egal (und auch der Inhalt falls eine Datei). Gibt auch die entsprechenden exist/mkdir... methoden.
Ein BufferedImage ist nichts anderes als Daten im Speicher. (siehe Illuvatar).
Und was ist jetzt das Problem. Um eine Menge Arbeitsspeicher in eine Datei auf der HD zu speichern, muss du ein File-Objekt erstellen, damit das File auf der HD erstellen, nun den Speicher ins das File drücken.
Nun hast du ein File-Object, dessen Inhalt das BufferedImage war. Wobei das File-Object interessiert das nicht. Es zeigt einfach auf das File (was auch immer es ist).
ImageIO mach etwa das.