Dateiberechtigungen aus Java heraus setzen?

McGizmo

Enthusiast
Thread Starter
Mitglied seit
05.02.2004
Beiträge
5.735
Ort
Großherzogtum Baden
Tag.

Ich hätte da mal eine Frage. Ist eventuell mehr eine Verständisfrage. Situation ist, dass ich ein Programm schreiben will, welches (DB gestützt) eine relativ große Ordnersturktur mit zugehörigen Gruppen- und Benutzerrichtlinien verwalten soll. Sprich Benutzer arbeiten mit diesen Verzeichnissen und immer mal wieder setzt halt jemand falsche Rechte. Und, viel häufiger versemmelt Windows die Rechte. Beim Kopieren von Dateien werden nämlich die Richtlinien der Quelle behalten, beim Verschieben die des Ziels gesetzt. Das führt sehr schnell zu Chaos.

Dazu müssen natürlich auch die entsprechenden Rechte gesetzt werden. Nehmen wir mal an, die Gruppen und Benutzer gibt es schon. Gibt es native Java Möglichkeiten (evtl. externe libraries) um Berechtigungen zu setzen oder geht das nur über den java.lang.Runtime - Umweg, also quasi per DOS CHMod (wie auch immer der Befehl unter DOS jetzt heißen mag)?

Was mich dabei interessiert ist die Performance. Die Lösung sollte halbwegs performant sein - und es sind eben einige tausend Ordner und entsprechend viele Dateien ...

*e* Wobei, jetzt wo ich drüber nachdenke. Das würde ja keinesfalls plattformunabhängig sein und damit doch eher dem Java Konzept wiedersprechend. Das bedeutet wohl,dass es doch über Runtime oder Process oder sowas gehen muss ... narf.
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wenn's halbwegs performant sein soll, solltest du es nicht mit Java machen, sondern mit einer beliebigen Programmiersprache, die auf Windows zu Hause ist. Und portabel wird das sowieso nicht, da alle Unix-artigen Betriebssysteme eine völlig andere Rechteverwaltung haben.

Also mach das mit VB.net,C# oder C++ ! Da steht auch sofort die benötigte API zur Verfügung.
 
Ab Java 6 ist es implementiert und sollte irgendwo in der Klasse File zu finden sein. Ich hab es aber selber noch nicht ausprobiert.

Performance sollte dabei keine Rolle spielen. Wenn du einen Ordner durchsuchst, ist der Flaschenhals die Festplatte. Die ist aber unabhängig von der Progammiersprache immer gleich schnell.
 
Hm, danke. Ich werd' mir das mit dem File auf jeden Fall mal anschauen, klingt auf jeden Fall mal interessant. War mir unbekannt, dass das geht ... Kenn ich die API also doch nicht auswendig? :lol:
Ich werd's aller Voraussicht nach allerdings doch in C++ oder C# implementieren. Je nachdem. Wahrscheinlich eher C++, C# ist so ne Sache. Da nehme ich allgemein lieber gleich Java. ;)
 
Schreib dann mal hier rein wie es geht. In den anderen Foren steht überall das Problem und die Antwort ist immer Java 6 aber keine kurze Erläuterung dazu.
 
So habe ich das vor einiger Zeit mal umgesetzt:

FileOutputStream fileOut;
OutputStreamWriter writer;

File f = new File ( path );
f.setWritable( true, false );

fileOut = new FileOutputStream( f );
writer = new OutputStreamWriter( fileOut,"ISO-8859-1" );

writer.write( ContentString );
writer.close();
fileOut.close();



siehe auch: http://java.sun.com/javase/6/docs/api/
 
Zuletzt bearbeitet:
Ähm - willst du jetzt Windows-Rechte setzen oder Linux ? Das ist was völlig anderes und ich glaub nicht, daß Java ne API für Windows-Rechte mitbringt.
 
Es gibt für jedes Betriebssystem eine JVM. Somit ist es egal auf welchem Betriebssystem du das ausführst. Es wird sowohl für Windows als auch für Linux funktionieren. Einzieges Problem ist, dass die Pfadangaben etwas anders sind aber dafür kann man ja mit relativen Pfaden arbeiten und eben nicht "C:\" eingeben.

Den Rest übernimmt die JVM. Die wirds schon die Lese und Schreibrechte richtig setzen. Das ist der Vorteil von Java. Es ist Platformunabhängig.
 
Soweit ich lese, geht es nicht nur um allgemeine Lese- und Schreibrechte, sondern auch darum bestimmten Nutzern diese zuzuweisen. Dazu gibt es ne spezielle API. Und noch dazu funktioniert das unter Unix-Systemen völlig anders. Da hilft es auch nix 20 mal von Platform-Unabhängigkeit zu reden.

Daß das in der JVM für Windows einigermaßen vollständig implementiert ist, glaube ich nicht.
 
Ja du hast Recht Java funktioniert nur unter Windows... Ich würd es eher andersrum formulieren. Es hilft nichts 20 mal zu behaupten, dass Java nicht Platformunabhängig ist. Genau das versuchst du gerade.

Es ist völlig egal wie unterschiedlich das Rechtesystem umgesetzt wird. Es gibt Gemeinsamkeiten. Sowohl in Windows als auch Linux gibt es ein Rechtesystem mit Benutzer und Gruppen. Was sollte da also das Problem sein? Ich schreibe im Quelltext nur, dass ich Benutzer XY schreibrecht geben möchte und die JVM setzt das entsprechend des verwendeten Betriebssystem um. Java 6 gibt es für Windows und von daher muss diese Funktionalität auch für Windows vollständig implementiert sein. Dein Glauben spielt dabei keine Rolle.

Ist sowieso egal. Das Problem wurde bereits gelöst.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh