Drucken

Java und VFS

Will man ein eigenes virtuelles Dateisystem (VFS) schreiben, das sich auch noch nahtlos in Swing-Anwendungen integriert, wird man durch die Swing-Dokumentation in die Irre geführt: Dort wird erklärt, dass man nur eine eigene Implementation von FileSystemView schaffen müsse, um das zu erreichen. Diese Klasse ist der zentrale Punkt, über den sich der Swing-Dateiauswahldialog Informationen rund ums Dateisystem beschaffe. Das ist leider falsch

Die Legende

Die Legende besagt, alle Informationen, die der Swing-Dateiauswahldialog über Dateisysteme braucht, holt er sich über einen FileSystemView. Das ist leider falsch, da das Default-LooknFeel sich Informationen leider auch über eine Klasse namens ShellFolder holt. Diese Klasse ist nicht nur Teil der undokumentierten sun.xxx-Namensräume sondern darüber hinaus auch noch als final deklariert - das heisst man kann sie auch nicht durch eine eigene abgeleitete Klasse ersetzen.

Darüber hinaus ist kein dokumentierter Weg vorgesehen, diese Klasse gegen eine alternative Implementierung zu ersetzen.

Viel schlimmer ist jedoch die Tatsache, dass nicht einmal ein Eingriff in den (OpenSource-) Quellcode der LooknFeel-Klasse von Sun hilft - man könnte schliesslich immer noch ein eigenes LooknFeel benutzen - da inzwischen viele der verfügbaren alternativen LooknFeels von Sun abgeschriebenhaben und sich dieser unsägliche Bug demzufolge in - grob geschätzt - weit über 90 Prozent aller LooknFeels manifestiert. Da ein Anwender von Java-Programmen aber frei ist in der Wahl des ihm angenehmsten LooknFeel, müsste man alle Ersteller solcher Alternativen dazu anhalten, die Benutzung der Klasse ShellFolder einzustellen und statt dessen nur noch offizielle/dokumentierte APIs zu verwenden - eine unmögliche Aufgabe.

Alternativen

Betriebssystem

Bei Dateisystemen wie etwa SSH oder ähnlichen ist es heutzutage sicher legitim für Anwendungsentwickler, die Unterstützung dafür dem Betriebssystem zu überlassen - speziell seit sich Ansätze wie etwa FUSE nicht mehr nur auf bestimmten Betriebssystemen nutzen lassen.

Open Source Community

Hat man einen sehr speziellen Anwendungsfall, in dem keine Unterstützung durch das Betriebssystem möglich ist, existieren Hilfsmittes aus der Open Source Community - beispielsweise das  Apache Commons VFS, das schon von Haus aus viele Dateisystemtypen unterstützt und leicht um eigene Varianten erweitert werden kann:

  • FTP 
  • lokale Dateien
  • HTTP(S)
  • SFTP
  • (komprimierte) Archive(ZIP, JAR, TAR (gzip und bzip2 Kompression werden unterstützt), #
  • ...
Mit dem VFSJFileChooser schließlich gibt es eine Swing-Komponente, die den guten alten JFileChooser ersetzt und die Möglichkeiten des Commons VFS voll ausnutzt.