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.
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 ;)
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.
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.
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...
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.
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 ^^).
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...^^