Serverdirectory auf Client browsen mit JFileChooser

D4rkscr43m

Bekanntes Mitglied
Hallo zusammen, meine erste Frage und schon weiß ich nicht sicher, in welchem Forum ich am besten aufgehoben bin. Deswegen versuche ich erstmal hier mein Glück, sollte es doch eher in die Netzwerkprogrammierung gehören, bitte verschieben.

Also, folgendes Problem: Server Software auf einem entfernten Gerät, Clientsoftware kann Einstellungen am Server vornehmen. Darunter auch Einstellungen zur Verzeichniswahl für z.B. Datenbankdateien oder Backuppfade. Die Kommunikation läuft dabei über SOAP und Webservices.
Jetzt gibt es die Möglichkeit diese Pfade in der Clientsoftware einfach einzutragen, wobei man an dieser Stelle nicht sicher sein kann, dass das Verzeichnis auf dem Server überhaupt existiert. Außerdem ist es nicht sonderlich Benutzerfreundlich Pfade komplett eintippen zu lassen.
Aus diesem Grund habe ich nach einer Möglichkeit gesucht in einem JFileChooser ein entferntes Directory anzuzeigen.
Mein erster Lösungsansatz: Ich hole mir eine List<File> vom Server, in der alle Verzeichnisse und Dateien eines Root-Verzeichnisses stehen. Dabei fiel mir auf, dass wsimport daraus eine List<String> macht. Habe dann versucht damit eine eigene FileSystemView zu schreiben, die diese Dateien dann in einem JFileChooser anzeigt und bei Bedarf (Wechsel von Verzeichnis etc.) eine neue Liste vom Server erfragt.

Mein Problem dabei: Die Information, ob es sich bei einem File im JFileChooser um eine Datei oder ein Verzeichnis handelt geht verloren.
Ein zweites Problem: Ich muss im JFileChooser Ordner UND .zip-Archive akzeptieren, da z.B. ein Backup aus einem Ordner oder einem Archiv geladen werden kann. Ordner kann ich nämlich dann garnicht wählen.

So meine Frage dazu: Hat jemand eine Idee, wie man sowas umsetzen kann, ohne gleich eine Klasse von JFileChooser ableiten zu müssen?
Order kennt vielleicht jemand schon ein Framework, dass mir die Arbeit abnimmt?

Mit freundlichen Grüßen

D4rkscr43m
 

bERt0r

Top Contributor
Also wenn der Client nichts mit den File Objekten des Servers anfangen kann könntest du dir eine eigene Klasse für die Files schreiben damit die Kommunikation funktioniert.
 

D4rkscr43m

Bekanntes Mitglied
Danke für die Überlegung.

Es ist aber so, dass ich vom Server keine File-Objekte bekomme, sondern nur Strings, die den Pfad beschreiben. Ein daraus erstelltes File-Objekt enthält zwar den richtigen Pfad, weiß aber nicht ob es ein Ordner oder eine Datei ist.

Ich habe das ganze mal so "angepasst" dass ich für jedes File-Objekt auf dem Server einen String bekomme, der den Pfad und die Information ob es sich um eine Datei handelt enthält. So komme ich zumindest nicht mehr dahin, dass ein Doppelklick auf eine Datei ein verzeichnis öffnen möchte.
Wenn hier noch jemand eine Idee hat, wie man das einfach lösen kann, immer her damit! :)

Das Problem was jetzt noch übrig bleibt, ist dass ich trotz der Zeile
Code:
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
keine Verzeichnisse auswählen kann. Bei der Auswahl von Dateien steht der Dateiname im entsprechenden Textfeld, bei der Auswahl eines Ordners aber nicht.
Wenn ich den JFileChooser für das Browsen von lokalen Dateien verwende funktioniert das aber einwandfrei und am JFileChooser und der Definition von
Code:
JFileChooser.FILES_AND_DIRECTORIES
bzw.
Code:
setFileSelectionMode
ändere ich ja nichts.

Hätte da vielleicht noch jemand ne Idee?
 

bERt0r

Top Contributor
Also mit dem JFileChooser wird das glaub ich nix. Wenn du dem ein File Objekt gibst, denkt der natürlich es ist lokal auf dem Rechner. Du musst dir deine eigene FileView schreiben, in der Objekte sind von denen du die listFile aufrufe an den Server weiterleiten kannst.
 

D4rkscr43m

Bekanntes Mitglied
Hallo bERt0r,

ich bin schon dazu übergegangen, eine ServerFileSystemView klasse zu schreiben. (Ich dachte ich hätte das schon irgendwo erwähnt... hab mich wohl vertan) diese View erledigt für mich das Nachladen weiterer Elemente und das Trennen von Dateinamen und Zusatzinformation. Dort sollte ich auch die Information bekommen, ob ich gerade einen Ordner oder eine Datei ausgewählt habe. Wobei das auch egal sein sollte.

Mein einziges Problem ist nämlich nur, dass er trotz der Einstellung von FILES_AND_DIRECTORIES nur Dateien erkennt und akzeptiert.
An einen Ordner komme ich nur, wenn ich in den Ordner wechsel UND den Ordnernamen per Hand eintrage. Im Normalfall sollte ich aber weder in den Ordner wechseln müssen, noch per Hand den Ordnername eintragen müssen.
Wie gesagt, lokal funktioniert das einwandfrei.

Und daran, dass er hinter einem File-Objekt eine lokale Datei vermutet, würde hier auch keinen Unterschied machen. Der Server läuft nämlich zur Zeit noch lokal zum testen. Das heißt, dass alle Dateien und Verzeichnisse auf dem Server auch lokal existieren.

Oder muss ich wirklich noch die FileView- und Fileklassen überschreiben? Ich möchte mir ungern die Arbeit machen, wenn es sich vermeiden lässt.
 

bERt0r

Top Contributor
Nochmal: Mit dem JFileChooser wirst du da nicht weit kommen. Und ja, eine Klasse die die File Objekte wrappt wirst du auch brauchen.
 

D4rkscr43m

Bekanntes Mitglied
Scheinbar lag es an einem Denkfehler von mir und mir hätte wohl wirklich ein RTFM weitergeholfen. :oops:

Beim Überschreiben der
Code:
FileSystemView
habe ich bei
Code:
public boolean isFileSystem(File f)
immer
Code:
false
zurück gegeben, da ich dachte, dass einfache Ordner keine Dateisysteme seien und die Methode für Files wie "C:\" oder so
Code:
true
zurück geben müsse >_< ...
Dabei steht schon im Kommentar zur Methode, dass sie nur für Ordner wie "Desktop" false zurück gibt.

Danke für die Mühe bERt0r und alle anderen, die sich das hier mal kurz angeguckt haben.
 

Ähnliche Java Themen

Neue Themen


Oben