Come specificare percorso del file in java?
-
18-09-2019 - |
Domanda
Ho creato un'applicazione java per "Debian Linux." Ora voglio che quella applicazione legge un file inserito nella directory in cui viene specificato il file jar di tale domanda. Allora, cosa specificare l'argomento dell'oggetto File?
File fileToBeReaded = new File(...);
Cosa specificare come argomento per la dichiarazione di cui sopra per specificare relativa percorsofile che rappresenta il percorso in cui è stato collocato il file jar dell'applicazione?
Soluzione
Se si conosce il nome del file, ovviamente è semplicemente
new File("./myFileName")
Se non si conosce il nome, è possibile utilizzare l'elenco dell'oggetto file () per ottenere un elenco dei file nella directory corrente, e poi scegliere quello che si desidera.
Altri suggerimenti
Utilizzando i percorsi relativi a java.io.File
è completamente dipendente dalla directory di lavoro corrente. Questo si differenzia con il modo in cui si esegue il JAR. Se siete per esempio in /foo
e si esegue il JAR dal java -jar /bar/jar/Bar.jar
quindi la directory di lavoro è ancora /foo
. Ma se si cd
a /bar/jar
ed eseguire java -jar Bar.jar
quindi la directory di lavoro è /bar/jar
.
Se si desidera che il percorso della directory principale in cui si trova il JAR, uno dei modi potrebbe essere:
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
Questo restituisce il percorso principale del file JAR (i.o.w. radice classpath). Se si posiziona la vostra risorsa relativo alla radice classpath, è possibile accedere come segue:
File resource = new File(root, "filename.ext");
In alternativa si può anche semplicemente usare:
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
Credo che questo dovrebbe fare il trucco:
File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");
In questo modo, il file sarà cercato nella proprietà user.dir
, che sarà la directory di lavoro della tua app.
Stai chiedendo di questioni di carattere fuga?
Se questo è il caso, allora utilizzare le barre anziché le barre rovesciate come
"C: /Users/You/Desktop/test.txt"
anziché
"C: \ Users \ Si \ Desktop \ test.txt"
Si potrebbe chiedere il vostro programma di caricamento classe di darvi la posizione del vaso:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
... ma io suggerirei di mettere il file che si sta cercando all'interno del file jar e leggerlo come una risorsa (getClass().getResourceAsStream( "myFile.txt" )
).