Frage

Ich habe eine Java -Anwendung für "Debian Linux" erstellt. Jetzt möchte ich, dass diese Anwendung eine Datei liest, die im Verzeichnis platziert ist, in dem die JAR -Datei dieser Anwendung angegeben ist. Was ist also beim Argument des Dateiobjekts festzulegen?

File fileToBeReaded = new File(...);

Was ist als Argument für die obige Anweisung anzugeben, um relative Filepath anzugeben, die den Pfad darstellt, in dem die JAR -Datei der Anwendung platziert wurde?

War es hilfreich?

Lösung

Wenn Sie den Namen der Datei kennen, ist dies natürlich einfach

new File("./myFileName")

Wenn Sie den Namen nicht kennen, können Sie mit der Liste der Dateiobjekte () eine Liste von Dateien im aktuellen Verzeichnis erhalten und dann die gewünschte auswählen.

Andere Tipps

Verwenden von relativen Pfaden in java.io.File ist vollständig vom aktuellen Arbeitsverzeichnis abhängig. Dies unterscheidet sich von der Art und Weise, wie Sie das Glas ausführen. Wenn Sie zum Beispiel in sind /foo und Sie führen das Glas durch java -jar /bar/jar/Bar.jar Dann ist das Arbeitsverzeichnis immer noch /foo. Aber wenn du cd zu /bar/jar und ausführen java -jar Bar.jar Dann ist das Arbeitsverzeichnis /bar/jar.

Wenn Sie den Wurzelpfad, in dem sich das Glas befindet, möchten, wäre eine der Möglichkeiten:

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

Dies gibt den Stammpfad der JAR -Datei zurück (Iow the ClassPath Root). Wenn Sie Ihre Ressource relativ zum Klassenpfad -Root platzieren, können Sie wie folgt darauf zugreifen:

File resource = new File(root, "filename.ext");

Alternativ können Sie auch nur verwenden:

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());

Ich denke, das sollte den Trick machen:

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

Auf diese Weise wird die Datei in der durchsucht user.dir Eigenschaft, das das Arbeitsverzeichnis Ihrer App sein wird.

Fragen Sie nach Problemen mit Fluchtcharakter?

Wenn dies der Fall ist, verwenden

"C: /Users/you/desktop/test.txt"

Anstatt von

"C: Benutzer Sie Desktop test.txt"

Sie können Ihren Klassenloader bitten, Ihnen den Ort des Glass zu geben:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

... aber ich würde vorschlagen, die Datei, die Sie suchen, in Ihre JAR -Datei zu setzen und sie als Ressource zu lesen (getClass().getResourceAsStream( "myFile.txt" )).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top