Forum: PC-Programmierung Java-Problem mit Pfaden.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Das ist ein Ausschnitt aus meinem Testcode:
1
String fpath = "||192.168.10.5|FM|670.zip";
2
fpath = fpath.replaceAll("|",FileSystems.getDefault().getSeparator());
3
System.out.println("fpath: "+fpath);
4
File file = new File(fpath);

und diese Fehlermeldung erhalte ich:
1
fpath: //192.168.10.5/FM/670.zip
2
java.nio.file.NoSuchFileException: /192.168.10.5/FM/670.zip

Fakt ist, das File und die Freigabe "FM" existieren definitiv auf dem 
Server, wo ist das sch... Problem?

Danke für Tips.

: Bearbeitet durch User
von Thilo L. (bc107)


Lesenswert?

Hmmm... vielleicht der fehlende doppelte Slash am Anfang?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Thilo L. schrieb:
> Hmmm... vielleicht der fehlende doppelte Slash am Anfang?

Ja, das vermute ich auch, aber wohin verschwindet der? Im Original (aus 
einer DB) steht ja "||", was dann ausgetauscht werden soll und in der 
Kotrollausgabe (über der Fehlermeldung) ist das ja auch so.

Ich habe schon mehrere "|||||" bzw "/////" versucht, werden immer auf 
eines reduziert.

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Führst du den Java-Code unter Windows oder was Unix-artigem aus?

Weil die UNC-Schreibweise '\\<server>\<freigabe>\<pfad&datei>' erfordert 
Unterstützung durch das OS, java bringt da keinen eigenen 
On-Demand-SMB-Client mit.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Wenn der Directory seperator / ist, ist dass dann ein Linux oder Unix 
system?
Bei denen hat // a Anfang nämlich keine spezielle Bedeutung. // und /./ 
und / werden da alle gleich behandelt, das bleibt ein lokaler Pfad, da 
wird nicht versucht, über smb irgendwo darauf zuzugreifen. Du kannst das 
auch im Terminal nachprüfen, mit "ls //192.168.10.5/FM/670.zip" wird 
versuchen, lokal eine Datei /192.168.10.5/FM/670.zip zu finden.

Manche Dateimanager & Gnome Anwendungen haben eventuell noch extra logik 
für URLs und derartiges eingebaut, meistens indirekt, wenn diese gio 
nutzen, und man GVfs installiert hat, lädt gio dann gvfs, und gvfs 
Mounted das zeug als Fuse Dateisystem in ~/.gvfs/, /run/user/$UID/gvfs 
oder $XDG_RUNTIME_DIR/gvfs, und über den lokalen Pfad können dann auch 
nicht-gio Anwendungen die Datei öffnen.

Ich finde das Design des ganze gvfs zeugs ja ziemlich bescheuert. Die 
hätten lieber ein FS machen sollen, dass man einfach in vfs oder so 
mountet, so dass man dann sowas wie /vfs/smb://192.168.10.5/FM/670.zip 
hätte machen können, und zwar von allen Anwendungen aus, nicht nur 
einigen Gnome Dingern, aber nein, sie mussten das Rad neu erfinden, 
mounten anders lösen, und die Pfade hin und her Konvertieren...

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Konkret sitze ich an einem Mac und will aus einer Java-App auf einen 
Windows-Server zugreifen. Das würde ich gerne, ohne dass ich extra ein 
Volume lokal mappen muss. Wenn ich das mache, dann klappt der Zugriff 
über
1
/Volumes/...
Dann ist das wohl so :-(

Ich dachte bisher immer, UNC-Pfade sind System-unabhängig.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Fehlt da das Protokoll vor der Freigabe?
1
String fpath = "smb:||192.168.10.5|FM|670.zip";

https://support.apple.com/de-de/guide/mac-help/mchlp1654/mac

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Mario M. schrieb:
> Fehlt da das Protokoll vor der Freigabe?String fpath =
> "smb:||192.168.10.5|FM|670.zip";
>
> https://support.apple.com/de-de/guide/mac-help/mchlp1654/mac

Das kenne ich natürlich vom Einrichten eines gemappten Volumes unter 
"Gehe zu Server ..." im Finder. In dem Falle hier habe ich es gerade 
probiert, macht keinen Unterschied.

In der AUsgabe der Fehlermeldung wird das weggelöscht und zusätzlich 
werden alle doppelten Slashes oder Backslashes zu einfachen, egal wie 
viele im Quellstring drin sind.

von oerks (Gast)


Lesenswert?

> Ich dachte bisher immer, UNC-Pfade sind System-unabhängig.

Und der Pabst ist katholisch.

Versuchs mit einem HTTP-Server.
Das sollte die Aussicht auf Erfolg deutlich steigern.

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

oerks schrieb:
> Versuchs mit einem HTTP-Server.

Warum sollte "java.io.File" einen HTTP-Server ansprechen können?

Und dass UNC nur unter Windows klappt, steht sogar in der Javadoc...

von oerks (Gast)


Lesenswert?

> "java.io.File"

Das war nur ein freundlicher Rat.
Wenn er mit UNC weiter basteln will, nur zu.
Ich mappe das halt vorher.
Da ist UNC dann aussen vor.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.