Filesystem begrenzen

  • Themenstarter Themenstarter Hjolldar
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

Hjolldar

Gast
Hallo,

wenn man in Java eine Instanz von java.io.File erzeugt, und KEINEN relativen Pfad angibt, landet die daraus entstehende Datei in dem Verzeichnis, in dem man die Java Anwendung gestartet hat.
Nun will ich aber ein Verhalten definieren, bei dem die Datei dann NICHT in diesem Verzeichnis landet, sondern in einem was die Anwendung selbst definiert hat.

Das ändern der System variable user.dir funktioniert nicht (da ist seit 7 Jahren ein Bug von Sun drin, der das verhindert)
Hat irgend jemand eine Ahnung, wie man das am besten realisieren kann?

Gruß,
M.
 
Also, das aktuelle Verzeichnis kann man in Java nicht setzen. Ob Bug oder Feature, sei mal dahingestellt 😉

Mir ist nicht so ganz klar, wo Dein Problem ist: wenn die Anwendung ein File von einem absoluten Pfad laden will, kann sie das doch und auch ein relativer Pfad zum Startpfad ist möglich.

Falls Deine Frage lautet, wie man herausfindet, in welchem Pfad eine ausgeführte Klasse liegt, gibt es dazu eine Möglichkeit über den Klassenlader:

Code:
URL startURL = getClass().getResource("Main.class");
System.out.println(startURL);

Im Beispiel sei Main.class der Name der ausgeführten Klasse.

Hilft Dir das?
 
Okay, ich beschreib mal das Problem genauer 😉

Ich schreibe ein Test-tool, welches in einer Art Sandbox eine Client anwendung starten und überwachen soll.
Wenn das Test-Tool startet, zeigt das "user.dir" auf das Verzeichnis des Test Tools.
Dann startet das Test tool die Client application.

Als Client Anwendung kommt jede Java Anwendung in betracht. Wenn nun diese Client Anwendung eine Datei öffnet (mit z.B. "new File("beispiel.txt);" funktioniert das nicht mehr, wenn das Test Tool diese Anwendung gestartet hat, da nun das File (und auch evtl. Configurationsfiles im Verzeichnis der Client Anwendung liegen.

Prinzipiell gibt es kein Problem damit, Verzeichnisse direkt anzugeben, allerdings kann ich von keiner Client Anwendung verlangen, dass sie ihren Code umschreiben, nur dass das Test tool laeuft.

Deshalb suche ich nach einer Möglichkeit, für die Client Anwendung eine Sandbox aufzubauen, die sich genau so verhaelt, als waere die Anwendung direkt und nicht ueber Unwege gestartet.
 
dochdoch, das soltle über die system proeprty gehen. versuch mal so:
System.setProperty("user.dir", "C:\\Blupp");
aber das ist nicht zu empfehlen, da andere Benutzer auch ander verzeichnisse und so haben.
das aktuelle verzeichnis ist imemr das aus dem java.exe aufgerufen wurde.
 
Naja, das mit dem "user.dir" hab ich schon versucht. Genau da liegt der Bug von Sun. Erstellt man auf diese Art ein File (new File("hallo.txt"); und lässt sich den absoluten Pfad anzeigen, besagt dieser auch, dass das File in C:\\Blupp liegen würde. Aber wenn man es dann tatsächlich erstellt, greift das System doch wieder auf das "alte" user.dir zu.
Das ist der Bug, der in sun's Bugparade unter den ersten 25 auf Platz 25 liegt.
 
hm dat is wohl scheiße
dann erstell dir deine datei so: new File(System.getProperty("user.dir") + "hallo.txt");
vielleicht gehts so?
 
Hallo zusammen,

WEiss zwar nicht, ob ich deine Frage recht verstanden habe. Ich hatte folgendes Problem:
java wurde aus dem Verzeichnis blabla\bin gestartet, aber ich wollte eine Datei aus dem
Verzeichnis blabla\logs auslesen.

Ich habe nun mit System.getProperty("user.dir") den absoluten Pfad des startverzeichnisses
herausgefunden und hab mir dann mit substrings und anhängen den gewünschten Pfad zusammen
gebastelt. Ist zwar Murks aber es funktioniert 😀

Code:
String filename = "xml-tng.log";
String dir = "logs";
String path =System.getProperty("user.dir");
int index = path.indexOf("bin");
String parent = path.substring(0,index);
path = parent+"\\"+dir+"\\";
// ...
File logfile = new File(path+filename);

Hoffe es hilft!

Gruss bongj
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben