Forum: PC-Programmierung mittels Java herausfinden, ob ein bestimmtes Laufwerk vorhanden ist


von Holger (Gast)


Lesenswert?

Hallo,

kann man irgendwie herausfinden, ob man unter Windows mit einem 
bestimmten Netzlaufwerk verbunden ist. Entweder Laufwerk z.B. S: oder 
eben \\server\konto\

Kann man sowas mit Java abfragen? Hintergrund: Daten sollen 
kontiunierlich auf eine bestimmtes Verzeichnis gespeichert werden.


Gruß
Holger

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

google: java api File -->File.listRoots();
Geht aber nicht für Netzlaufwerke, sondern nur für Laufwerksbuchstaben 
soweit ich weiß, also im Zweifel als Netzlaufwerk einbinden.

von Holger (Gast)


Lesenswert?

Hallo, danke für den Tipp. Unter windows kann ich mir so auf jeden Fall 
das Konto anzeigen lassen und das dann abbrüfen.

Holger

von Peter (Gast)


Lesenswert?

warum schreibst du dann nicht immer auf \\server\konto\ - wenn die daten 
eh dort hin sollen? Wenn es ein Fehler gibt dann ist der Server nicht 
erreichbar - dann kannst du eh nichts machen, die Daten sollen ja dort 
hin.

von gast (Gast)


Lesenswert?

so könnte das hinhauen
1
try{
2
new File("Pfad").open();
3
}
4
catch(irgendeine Exception){
5
mach was dagegen
6
}

von der mechatroniker (Gast)


Lesenswert?

> Wenn es ein Fehler gibt dann ist der Server nicht
> erreichbar - dann kannst du eh nichts machen, die Daten sollen ja dort
> hin.

Nichts machen stimmt nicht ganz. Wenn z.B. der Benutzer, unter dessen 
Konto das Programm läuft, auf \\server\freigabe nicht zugreifen darf, 
gehts ohne Netzlaufwerk schief. Wenn aber der Benutzer dasselbe 
Verzeichnis als Netzlaufwerk öffnet (und sich dabei mit einem anderen 
Usernamen und PW ausweisen kann) gehts nachher.

von Peter (Gast)


Lesenswert?

wenn soetwas wie unter "anderem namen verbinden gemacht werden muss", 
dann sollte man eventuell mal den Admin bescheidsagen das da was nicht 
stimmt - so etwa sollte in einem Administrierten netzt nicht auftreten. 
Entweder hat der Benutzer zugriff auf dem Rechner oder nicht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

gast schrieb:
> so könnte das hinhauen
>
1
> try{
2
> new File("Pfad").open();
3
> }
4
> catch(irgendeine Exception){
5
> mach was dagegen
6
> }
7
>
Jav bietet die Methoden: exits(), canRead(), canWrite() um das ganze 
ohne den Versuch des vorherigen öffnens zu bewerkstelligen.

von Sven P. (Gast)


Lesenswert?

Und statt \\Server\Freigabe\ muss man ganz ergonomisch unter Windows 
entweder '\\\\Server\\Freigabe\\' schreiben oder den plattformabhängigen 
Pfadtrenner benutzen, der irgendwo in den Java-Abgründen vergraben ist.
(Das war ernst gemeint, irgendwo in irgendeiner Klasse gibts da eine 
Konstante für die aktuelle Plattform...)

von *.* (Gast)


Lesenswert?

> canRead(), canWrite()

Die sind nicht sonderlich viel wert...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Sven P. schrieb:
> Und statt \\Server\Freigabe\ muss man ganz ergonomisch unter Windows
> entweder '\\\\Server\\Freigabe\\' schreiben oder den plattformabhängigen
> Pfadtrenner benutzen, der irgendwo in den Java-Abgründen vergraben ist.
> (Das war ernst gemeint, irgendwo in irgendeiner Klasse gibts da eine
> Konstante für die aktuelle Plattform...)

Also wir hatten doch schonmal diskutiert das Windows sowohl '/' als auch 
'\' aktzeptiert, und besagtes Symbol ist in gar keinen Abgründen 
vergraben sondern befindet sich (wer hätte es vermutet) in der Klasse 
File als public Konstante namens 'seperator' ... also "vollständig" 
zugreifbar mittels File.seperator
http://java.sun.com/j2se/1.3/docs/api/java/io/File.html#separator

Wie kommt es eigentlich das du in jedem Thread deinen Unmut über 
Windows(pfadtrenner) äußern mußt? Ist meiner Meinung nach nicht 
zielführend aber ist natürlich deine Sache.

@*.*
Eine sehr fundierte Antwort danke für diesen Beitrag!
Also ein grober Anhaltspunkt ist das schon, nur übers Netzwerk scheint 
es bei Win98 nicht zu funktionieren (unter XP/Vista mag das anders 
sein).
Das einzige Ärgernis ist das man damit nicht festellen kann wenn ein 
Programm wie Acrobat einen Lock auf der Datei hält.
Dafür sind diese Funktionen aber auch nicht konzipiert, sondern geben 
auskunft ob du prinzipiell die Berechtigung hast (appletts dürfen z.B. 
nicht ohne weiteres auf das lokale Dateisystem zugreifen) ob dies dann 
im weiteren Verlauf auch wirklich klappt wird nicht garantiert (die 
Datei könnte zwischen den Zugriffen ja auch gelöscht/umbenannt/rechte 
geändert worden sein)
1
public static void main(String[] args) throws Exception {
2
    File f = new File("Existiert Nicht");
3
    testFile(f);
4
    f = new File("schreibgeschuetzt.txt");
5
    testFile(f);
6
    f = new File("//UNI-514965/daten/keinzugriff.netzwerk.txt");
7
    testFile(f);
8
}
9
10
private static void testFile(File f) {
11
    System.out.println("["+f+"]");
12
    System.out.println("\tExists\t"+f.exists());
13
    System.out.println("\tWrite\t"+f.canWrite());
14
    System.out.println("\tRead\t"+f.canRead());
15
}
Ergebnis
1
[Existiert Nicht]
2
        Exists  false
3
        Write   false
4
        Read    false
5
[schreibgeschuetzt.txt]
6
        Exists  true
7
        Write   false
8
        Read    true
9
[\\UNI-514965\daten\keinzugriff.netzwerk.txt]
10
        Exists  true
11
        Write   true
12
        Read    true

von Daniel F. (df311)


Lesenswert?

Läubi .. schrieb:
> gast schrieb:
>> so könnte das hinhauen
>>
1
>> try{
2
>> new File("Pfad").open();
3
>> }
4
>> catch(irgendeine Exception){
5
>> mach was dagegen
6
>> }
7
>>
> Jav bietet die Methoden: exits(), canRead(), canWrite() um das ganze
> ohne den Versuch des vorherigen öffnens zu bewerkstelligen.

naja, wenn daten kontinuierlich in das verzeichnis gespeichert werden 
sollen und explizit nach einer java-lösung gefragt wird, würde ich 
zumindest vermuten, dass die daten vom java-programm gespeicehrt werden 
sollen. und in einem solchen fall würde man mit open zwei fliegen mit 
einer klappe schlagen.

wenn das java-programm aber nur prüfen sollte, ob das netzlaufwerk da 
ist, ist java zu 99% die falsche sprache...

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.