2011-12-26 7 views
6

Tengo una pregunta de Java con la que he estado teniendo problemas: ¿cuál es una buena manera de indicar rutas relativas de archivos?Trayectorias relativas de archivos Java

Déjame ser más específico. Quiero poder decir que siempre busque los archivos de configuración en ./configuration/file.txt. El problema que tengo es que mi programa solo funcionará correctamente si se inicia desde el directorio en el que se encuentra el archivo. Si, en cambio, lo inicio desde un directorio diferente como ./directory/to/my/program/execute.sh, entonces no funciona correctamente.

Pero también necesito realizar cambios en este archivo, y los recursos parecen querer ser de sólo lectura ...

+0

Quizás quiso decir './configuration/file.txt' en lugar de'/configuration/file.txt'. El segundo camino es absoluto y no debería causar un problema. –

+0

thx buena captura, corrigió el error tipográfico –

+0

Puede poner la ruta absoluta al archivo de configuración * real * en un recurso si necesita la posibilidad de modificar la configuración. –

Respuesta

3

es necesario proporcionar un mecanismo para definir un directorio, al igual que a través de una variable de entorno, una argumento de línea de comandos, el archivo de configuración, la API de preferencias, etc.

2

Si desea /configuration/file.txt para denotar un archivo con respecto a algo, tendrá que definir lo que algo es. Por lo general, dejamos que algo sea "el classpath o el directorio actual". Sin embargo, tendrá que escribir un código para que funcione. Algo parecido a lo siguiente (no probado).

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

Para garantizar que sus datos están siempre en la misma ubicación, puede hacer uso del directorio de inicio. Haciendo uso del directorio personal le dará un poco de coherencia a través de diferentes plataformas y su programa puede acceder a los datos sin tener en cuenta el directorio que está en

Por ejemplo:.

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

y luego se puede recuperar un archivo más tarde con algo como

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

Véase también [esta respuesta] (http://stackoverflow.com/a/5052359/418556). –

Cuestiones relacionadas