miércoles, 17 de enero de 2007

Obtener la ruta de la aplicacion en Java con StringTokenizer

El usuario final de cualquier software debería poder instalar este en la unidad y carpeta que el decida mas conveniente, por lo que a la hora de escribir el programa no podemos simplemente especificar la ruta en la que estará instalada este soft posteriormente.

Mediante getClass().getResource("archivo.ext"); podemos obtener el URL desde donde se esta ejecutando el programa, y obtener la dirección exacta del archivo que deseemos localizar, el problema radica en que nos devuelve algo como esto:

file:/C:/Documents%20and%20Settings/SLiM/Escritorio/Tecno/programa/Tutoriles/classes/archivo.ext

Una clase de mucha utilidad para casos como este es StringTokenizer, que nos permite recorrer un String en partes divididas por un carácter común, en este caso nuestro carácter común será "/".


Aquí les dejo un ejemplo de como utilizando StringTokenizer podemos obtener nuestra ruta exacta algo así como: "C:/Documents%20and%20Settings/SLiM/Escritorio/Tecno/programa/Tutoriles/classes/archivo.ext"

import java.util.StringTokenizer;

public class miPrograma {

public String getPath(String file){

String ruta = getClass().getResource(file).toString();
StringTokenizer tokenizer = new StringTokenizer(ruta, "/");
tokenizer.nextToken(); // Para saltar el la parte que no deseamos
String newRuta="";

while (tokenizer.hasMoreTokens()) {
newRuta+= tokenizer.nextToken()+"/";
}

return newRuta;
}

public static void main(String[] args) {
miPrograma instancia=new miPrograma();
System.out.println(instancia.getPath());

}

}

Esperamos que este miniTecnoTurorial haya sido de utilidad. Un saludo desde TecnoTutoriales.

2 comentarios:

Arscek dijo...

Funciona bien el código, sólo hice una pequeña modificación para obtener sólo la ruta sin incluir el nombre del archivo, por si a alguien le sirve... Tienes idea si esto funciona de la misma manera en linux??

StringTokenizer tokenizer = new StringTokenizer(ruta, "/");
tokenizer.nextToken(); // Para saltar el la parte que no deseamos
String newRuta="";
int i = 0;
while (i < (tokenizer.countTokens()-1)) {

newRuta+= tokenizer.nextToken()+"/";

}

Anónimo dijo...

Sería mucho más sencillo si utilizan el método replace(oldChar,newChar) y en el lugar de oldChar ponen "file:/" y en el lugar de newChar ponen un String vacío. Ej.

String = String.replace("file:/","");