2011-12-26 19 views
6

Ho una domanda Java con cui ho avuto problemi: quale è un buon modo per indicare percorsi di file relativi.Percorsi file relativi Java

Vorrei essere più specifico. Voglio poter dire di cercare sempre i file di configurazione in ./configuration/file.txt. Il problema che sto avendo è che il mio programma funzionerà correttamente solo se viene avviato dalla directory in cui si trova il file. Se invece lo avvio da una directory diversa come ./directory/to/my/program/execute.sh, non funziona correttamente.

Ma ho anche bisogno di fare modifiche a questo file, e le risorse sembrano voler essere di sola lettura ...

+0

Intendevi './configuration/file.txt' invece di'/configuration/file.txt'. Il secondo percorso è assoluto e non dovrebbe causare problemi. –

+0

thx good catch, corretto l'errore di battitura –

+0

È possibile inserire il percorso assoluto del file di configurazione * real * in una risorsa se è necessario modificare le impostazioni di configurazione. –

risposta

3

è necessario fornire un meccanismo per la definizione di una directory, come attraverso una variabile d'ambiente, un argomento della riga di comando, file di configurazione, l'API preferenze, ecc

2

Se si desidera /configuration/file.txt per indicare un file relativo a qualcosa, si dovrà definire cosa che qualcosa è. Di solito lasciamo che qualcosa sia "il classpath o la directory corrente". Dovrai scrivere un codice per farlo funzionare. Qualcosa sulla falsariga di quanto segue (non testato).

public InputStream getResource(String path) throws IOException { 
    // try relative to current directory 
    File file = new File(path); 
    if (file.exists()) { 
    return new FileInputStream(file); 
    } 
    // try the classpath 
    return Thread.currentThread().getContextClassLoader().getResourceAsStream(path); 
} 
3

Per garantire che i dati siano sempre nella stessa posizione, è possibile utilizzare la directory principale. Facendo uso della home directory vi darà una certa coerenza tra piattaforme diverse e il programma può accedere ai dati indipendentemente dalla directory è in

Ad esempio:.

String userHomeDir = System.getProperty("user.home", "."); 
String systemDir = userHomeDir + "/.collection"; 

e quindi è possibile recuperare un file in seguito con qualcosa come

String fileLocation = systemDir + "/file.txt"; 
+0

Vedere anche [questa risposta] (http://stackoverflow.com/a/5052359/418556). –

Problemi correlati