Netzwerkdatei öffnen (SMB)

Hallo Leute,
wie bereits hier geschrieben: http://forum.byte-welt.net/threads/10759-Netzwerkdatei-verzeichnis-lesen-und-schreiben bin ich gerade dabei Netzwerkdateien via Java abzurufen, zu lesen, etc.
Langsam aber sicher funktioniert das auch weitesgehend.
Ich kann Ordner öffnen und mir die Dateien innerhalb des Ordners anzeigen. Ich kann (bspw. eine *.txt) Datei öffnen und auslesen.

Nun kommt der nächste Schritt. Nach meiner bisherigen recherche befürchte ich allerdings, dass das nicht so funktioniert wie ich mir das vorstelle.

Ich möchte dem Benutzer nun die Möglichkeit bieten, die Dateien, die er in meinem Programm aufgelistet bekommt, auch über mein Programm zu öffnen.
Sprich:

  • test.pdf wird aufgelistet
  • Nutzer klickt doppelt drauf
  • Java weißt das Betriebssystem dazu an die Datei “\x.x.x.x est est.pdf” zu öffnen.

Bisher habe ich das immer folgendesmaßen gemacht:

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file.getPath());

Wahlweise geht es soweit ich weiß aber auch mit

Desktop.getDesktop().open(file);

Solange ich unter Windows arbeite und der Benutzer bereits am Netzwerk angemeldet ist, funktioniert das auch wunderbar, als wäre die Datei Lokal vorhanden.
Nun kann es aber sein (bzw. ist so), dass ein Benutzer nocht nicht am Netzwerk angemeldet ist oder MAC OS nutzt. (Deswegen habe ich ja nun auch das lesen von Verzeichnissen o.ä. mit SmbFile gelöst)

Ich habe es schon wie hier beschrieben versucht: http://reecegriffin.com/blog/java_and_samba.html
bzw. ich wollte IMMER (also auch bei Windows) mit Desktop.getDesktop().browse(uri); arbeiten.
Allerdings ohne erfolg. Ich bekomme immer die Meldung “Zugriff verweigert”.
Auch wenn mein Pfad folgenden Aufbau hat:
"smb://domäne;benutzer:passwort@x.x.x.x/test/test.pdf"

Hat jemand eine Idee / eine Lösung für mein Problem?
Danke schon mal im voraus

natürlich gibt es libs die es einem ermöglichen das SaMBa-Protocol zu nutzen, allerdings darf man nicht vergessen dass das eigentliche SMB-Protocol ein propiertäres Protocol von M$ ist, was zwar im MSDN beschrieben ist, für das es so aber sicher keine öffentliche referenz-impl geben dürfte (zumindest nicht von M$)
dadurch kann es also sicher trotz größtmöglicher anstrengungen der community immer zu änderungen durch M$ kommen die das ganze dann “kaputt” machen

die “LAN-Manager”-verbindung (wie es auch bezeichnet wird) ist halt so ein ganz eigenes M$-ding … vor allem wenn es dann noch mit domain-controller zur sache geht

klar bekommt man sowas schon irgendwie hin, dürfte halt etwas aufwändig werden, aber ich denke das du es einfach von der falschen seite angehst

in der IT ist es doch so : such den billigsten, einfachsten und besten weg, und wenn ich an diese 3 punkte denke würde mir mal eben so spontan einfallen : FTP
warum sich also umständlich mit java einen zusammen leiern wenn man auf dem Win-Server einfach einen FTP-server installieren kann, mit ein bissl getrickse die rechte-verwaltung der user-konten kopieren kann und dann bequem ein noch viel älteres protokoll nutzt bei dem man weis das es von JEDEM OS heutzutage unterstützt wird

der einzige unterschied : im gegensatz zu nem Netzlaufwerk unter Win muss man sich selbst drum kümmern das File via FTP zu laden, zu öffnen, nach änderung ggf selbst wieder hochzuladen und alle TEMP-daten danach wieder zu löschen

oder man schließt einfach den fehlfaktor (ein NICHT-windows system) einfach aus

oder man schließt einfach den fehlfaktor (ein NICHT-windows system) einfach aus

Das ist mir leider nicht Möglich :smiley: Dieser Fehlfaktor ist so ziemlich der Hauptgrund weswegen ich etwas an meiner bisherigen Vorgehensweise ändern muss.

An FTP habe ich auch schon gedacht. War aber durch die Einfachheit des bisherigen Zugriffs auf Netzwerkressourcen geblendet und dachte, „dann kanns ja unter einem nicht windows system auch nicht so dramatisch sein“)…

Es gibt nur eine Sache bei der FTP Lösung, die mir noch zu denken gibt.
Und zwar würde der Ablauf ja folgender sein:

  • Datei anklicken
  • Datei via FTP temporär herunterladen und öffnen
  • Benutzer bearbeitet Datei (bspw. in MS-Word)
  • Benutzer speichert und schließt die Datei
    - Datei via FTP erneut hochladen

Wie schaffe ich es, dass mein Programm die Datei nach Bearbeitung automatisch wieder hoch läd?
Wenn die Datei bspw. in MS-Word geöffnet ist, bekommt mein Java-Prorgramm davon garnichts mit.
Das war bisher auch der Grund, weswegen ich von dem FTP-Gedanken immer wieder weg gekommen bin. Da ich nicht weiß wie ich das mit den temporären Dateien handeln kann.

tja, da haut Destop.open() wieder rein
denn leider bekommst du hier kein Process-objekt auf das du warten könntest

dann würde mir spontan nur noch folgendes einfallen : lokale einbindung
unter windows heißt das ganze “Netzlaufwerk” und kann von jeder im netzwerk vorhandenen beliebigen resource aus gelinkt werden
wenn mich jetzt nicht alles täuscht müsste das auch mit einem passenden treiber und nem korrekten mount auch unter unix möglich sein (und damit auch unter mac)
also das man halt eine netzwerkresource ins lokale dateisystem einbindet und den rest dann das system und dessen treiber machen lässt
laut google geht das sehr einfach in dem man SMBFS angibt und ein passenden treiber/mount-tool nutzt

dann würde letztendlich dein programm also gar nichts mehr von irgendwelchen netzwerkpfaden wissen sondern würde “quasi-lokal” arbeiten … was dann auch die direkte verwendung von File ermöglichen sollte