[Java] File.getOwner() ??

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
PKeidel
Beiträge: 28
Registriert: 22.11.2007, 20:04

[Java] File.getOwner() ??

Beitrag von PKeidel »

Hi Leute,

gibt es eine Möglichkeit unter Java (mit Linux/Ubuntu) den Besitzer einer Datei zu ermitteln?

Bei VB.NET geht das ja ganz einfach mit:

Code: Alles auswählen

Me.Text = New IO.FileInfo("C:\text.txt").GetAccessControl.GetOwner(GetType(Security.Principal.NTAccount)).Value.ToString
Aber wie kann man soetwas nicht in Java machen?

Ich habe den Link dazu gefunden, aber das geht scheinbar nur unter Windows, was mir aber nix bringt :(

Wer also schon ein Mal ein solches Problem hatte oder weiß wie es funzt, bitte mal hier melden ;)

MfG,
PKeidel
Jaw
Beiträge: 54
Registriert: 14.07.2004, 01:00
Wohnort: Raum Düsseldorf

Re: [Java] File.getOwner() ??

Beitrag von Jaw »

Also wenn ein JAVA Programm nur auf einem System laufen soll und noch besser wenn es sich nur um Eigenbedarf handelt und nichts, was wirklich an einen Kunden geht, bieten sich immer zwei mögliche Workaraunds an:

1) Native Funktion mit JNI aufrufen
2) mit Runtime exec einen Kommandozeilenbefehl ausführen und das Ergebnis verarbeiten

Ist nur beides schmutzig und nicht mehr Plattformunabhängig, es sei denn man baut eine schreckliche Weiche ein, die nach System eine plattformabhängige Implementation ausführt.

-JAW
PKeidel
Beiträge: 28
Registriert: 22.11.2007, 20:04

Re: [Java] File.getOwner() ??

Beitrag von PKeidel »

Hi,
ich danke dir für die Antwort!

Also es ist nur für den Eigenbedarf (unsere Abteilung an der Arbeit^^) und läuft auch nur unter ubuntu.
Das mit dem JNI hab ich auch schon gefunden, aber leider nicht zum Laufen bekommen da ich ehrlich gesagt noch nicht wirklich viel Ahnung von Java habe.

Kannst du mir da vllt ein paar gute Seiten empfehlen wo das etwas erklärt wird? Am Besten gleich mit Beispiel ;)


MfG,
PKeidel
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Java] File.getOwner() ??

Beitrag von Chromanoid »

ich würde statt jni jna nehmen. damit kann man ziemlich schnell auf funktionen in dll/so-geschichten zugreifen ohne irgendwas speziell für java auf der native seite vorzubereiten.
ich würde allerdings eher auf exec setzen. das geht wesentlich einfacher. du müsstest ja nur einen kleinen shellscript oder so schreiben der dir für eine datei (oder mehrere) den owner rausgibt und diesen dann in java aufrufen - du musst dann bloß die ausgabe des prozesses abfangen und fertig.
PKeidel
Beiträge: 28
Registriert: 22.11.2007, 20:04

Re: [Java] File.getOwner() ??

Beitrag von PKeidel »

Hi,
Chromanoid hat geschrieben:du musst dann bloß die ausgabe des prozesses abfangen und fertig
Ja, so hatte ich mir das auch schon überlegt und es auch so hinbekommen. Allerdings hab ich da ein großes Problem: Es dauert alles viel zu lange, weils net nur eine Datei is und au net etwas mehr, sonder fast 100.000.000 Stück! :)

D.h. es hat eine Laufzeit von über einem Tag oder so^^ ...und das is dann nix gutes.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Java] File.getOwner() ??

Beitrag von Chromanoid »

machst du pro datei einmal exec? edit: man müsste doch sonst auch einfach die ausgabe von ls oder so parsen können. ansonsten ist wie gesagt imo jna wirklich sehr easy...
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: [Java] File.getOwner() ??

Beitrag von Alexander Kornrumpf »

Hmm aber java verwenden?

Vielleicht solltest du besser den output von ls parsen statt irgendwas für jede Datei einzeln zu machen?

Falls das nicht hilft musst du es doch richtig machen. Was du suchst nennt sich Inode-Information.
http://de.wikipedia.org/wiki/Inode
http://www.unix.com/unix-advanced-exper ... ation.html
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Java] File.getOwner() ??

Beitrag von Chromanoid »

huch ^^ mein edit wahr wohl etwas zu langsam ^^
Alexander Kornrumpf hat geschrieben:Hmm aber java verwenden?
naja wir wollen jetzt ja nich über java streiten oder^^? :D
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: [Java] File.getOwner() ??

Beitrag von Alexander Kornrumpf »

Es ging mir gar nicht so sehr um das Tempo von Java als Sprache als darum dass hier wohl gilt dass es möglichs Systemnah gemacht werden sollte um Schnell zu sein (idealerweise das Filesystem selbst parsen :) ) und die systemnahen linux Funktionen für C vorliegen. Abgesehen davon dass es hier eh nicht zu funktionieren scheint produziert eine Klasse wie File mit sicherheit Overhead der für diese Aufgabe unnötig ist.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Java] File.getOwner() ??

Beitrag von Chromanoid »

ja, da stimme ich dir zu.
wenn die weiterverarbeitung der informationen in java geschehen soll, könnte es evt. auch recht zügig gehen, wenn man die ausgabe von ls/find in eine datei speichert und diese dann abarbeitet (ggf. mit mehreren threads und mehreren computern ^^).
PKeidel
Beiträge: 28
Registriert: 22.11.2007, 20:04

Re: [Java] File.getOwner() ??

Beitrag von PKeidel »

Hi,
nach langem Experimentieren melde ich mich mal wieder ;)

Ich habe mir jetzt eine eigene Klasse AdvFile geschrieben, die das Ergebnis von "ls -l" auswertet:

Code: Alles auswählen

 // dirPath = /home/pkeidel
// line = drwxr-xr-x  5 pkeidel pkeidel     4096 2010-05-28 12:06 android
public AdvFile(String dirPath, String line)
	{
		// drwxr-xr-x 5 pk16978 pk16978 4096 2010-05-28 12:06 andro
		Pattern pattern = Pattern
		      .compile("^([\\-a-z])([a-z\\-]{9})[ ]*([0-9]*)[ ]*([a-z0-9]*)[ ]*([a-z0-9]*)[ ]*([0-9]*)[ ]*([0-9]{4}\\-[0-9]{2}\\-[0-9]{2} [0-9]{2}:[0-9]{2}) (.*)$");
		Matcher matcher = pattern.matcher(line);
		// System.out.println("____________________________\n" + line);
		while (matcher.find())
		{
			try
			{
				this.typ = matcher.group(1);
				this.rechte = matcher.group(2);
				this.ka = matcher.group(3);
				this.besitzer = matcher.group(4);
				this.gruppe = matcher.group(5);
				this.bytes = Integer.parseInt(matcher.group(6));
				this.aenerdung = matcher.group(7);
				this.path = dirPath + "/" + matcher.group(8);
				this.ebene = buchstabenzaehler(this.path, '/');
				this.finished = true;
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
Falls ihr eine bessere (oder sichere) Möglichkeit habt, dann lasst es mich bitte wissen ;)
...denn ich bin mir nicht sicher ob das mit dem RegEx bei 100.000.000 Files 100%ig (oder wenigstens 99%ig) funktioniert :(


PS: Wieso werden im Code-Tag die Leerzeichen weg gemacht? Das ist ja doof...^^
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: [Java] File.getOwner() ??

Beitrag von Alexander Kornrumpf »

fixed that for you {code=java}
PKeidel
Beiträge: 28
Registriert: 22.11.2007, 20:04

Re: [Java] File.getOwner() ??

Beitrag von PKeidel »

Oh, cool. Ich danke dir^^
Antworten