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?

È stato utile?

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" )).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top