2010-06-23 18 views
6

Dieser Java-Code listet Dateien in einem Verzeichnis auf einem freigegebenen Windows-Laufwerk auf. Wird es auf einem Unix-System korrekt funktionieren?Funktioniert das unter Unix?

File directory = new File("\\\\server/Shared/stuff/mystuff"); 
for (File file: directory.listFiles()) { 
    System.out.println(file); 
} 
+0

Mit gemischten Dateitrennzeichen Tokens? Ich wäre sehr überrascht, wenn es funktioniert. –

+0

Sie können diese Frage verweisen --- http://stackoverflow.com/questions/3100625/how-can-i-read-from-a-windows-shared-drive-in-a-platform-independent-way -using-ja – Bill

+2

Warum versuchst du es nicht? – Anders

Antwort

8

Kurze Antwort: Nein.

Lange Antwort: Haben Sie Samba installiert? Selbst dann müssen Sie die Freigabe mounten. Also wird es wahrscheinlich nicht funktionieren.

EDIT

Java Delegierten der Aufruf an das zugrunde liegende Betriebssystem schließlich. Da Unix nicht weiß, was der Pfad \\SERVERNAME bedeutet, weiß Java auch nicht, was es bedeutet. Was Sie tun müssen, um dies zum Laufen zu bringen, ist das Laufwerk explizit mit Samba zu mounten. Ihre andere Option, wenn Sie Ubuntu ausführen, ist unter .gvfs in Ihrem Verzeichnis home. Ubuntu erstellt dort ein Mount für Ihre Samba-Freigaben, auf die Sie mit Java zugreifen können. Wenn Sie sich nicht auf externe Tools verlassen möchten, versuchen Sie JCIFS für eine reine Java-Lösung.

1

Nein, wie das ist ein UNC-Pfad, der ein Windowsism ist.

Versuchen Sie, auf eine Windows-Freigabe von Unix zuzugreifen? Dann werfen Sie einen Blick auf jcifs.

2

Auf meinem System (Debian Sid mit Gnome 2.30 Desktop) muss ich "smb: /// server/Shared/..." auswählen, um das gleiche Verhalten zu erreichen. Ich denke, dass GVFS (Gnome Virtual File System) mit smbfs Treiber die reale Verbindung im Hintergrund behandelt ...

3

Nein ... Lassen Sie den Benutzer einfach den richtigen Pfad auswählen und verwenden Sie einen Betriebssystem abhängigen Dateiauswahldialog .

1

Die Gegenfrage, die ich bekomme, wenn ich das sehe, ist: "Warum sollten Sie in Ihrer Anwendung einen Pfad fest codieren wollen?"

Auch wenn es nur für das Beispiel war und Sie beabsichtigen, den Pfad von einer Eigenschaftendatei oder irgendetwas zu laden, ich denke immer noch, dass Sie hier auf der falschen Spur sind.

Zunächst werden Sie absolute Pfade wie die Pest vermeiden wollen. Relative Pfade sind in Ordnung. Sie können Slash ('/') Zeichen in fest codierten Pfaden verwenden, es funktioniert sowohl unter Windows als auch unter Linux/Mac. Grundsätzlich alle Plattformen.

Zweitens, warum überhaupt Pfade verwenden? Dies ist das Internetzeitalter. URLs verwenden! Datei: URLs erreichen dasselbe wie Dateipfade, aber die Verwendung von URLs ermöglicht es, dass Ihre App auch Ressourcen aus anderen Quellen wie Websites und FTP akzeptiert.

Drittens, vermeiden Sie die Dateiklasse. Wenn du einen guten Weg erfindest, bist du völlig aus der Holzarbeit raus. Verwenden Sie URLs zusammen mit getResource und getResourceAsStream und Ihre App wird plattformunabhängig und netzwerkübergreifend über das Internet arbeiten.

Verwandte Themen