Foro de elhacker.net

Programación => Java => Mensaje iniciado por: athlit en 21 Mayo 2010, 11:41 am



Título: Consulta ruta relativa
Publicado por: athlit en 21 Mayo 2010, 11:41 am
Buenos días a todos,
llevo un par de días peleándome con un tema y por más que he mirado en internet no he sabido encontrar nada al respecto.
Lanzó aquí la consulta por si alguien se ha encontrado con esto alguna vez y me pudiera dar alguna idea.

Muchas gracias a todos por adelantado.

Ahí va: (Intentaré ser breve y claro)
Tengo una clase desde la que creo un fichero de texto  (sin ponerle ruta), bien, si ejecuto la clase me crea el fichero de texto en la raiz donde tengo la aplicacion. Hasta aquí, ok.

El problema....
Si desde un JSP, envío unos datos a un servlet, y éste llama a esa clase para que cree el fichero, entonces me lo crea en la ruta donde tengo instalado Eclipse.
Si genero el WAR y lo ejecuto en el Tomcat, el fichero me lo crea en la ruta del tomcat.exe.

Esto me rompe totalmente para trabajar con las rutas. Alguien sabe o se ha encontrado en alguna ocasión con una situación similar??

Yo entiendo que ejecute desde donde lo ejecute, debería crearme el ficherito en la raiz de la aplicacion, o sino, siempre en el mismo sitio.

Muchas gracias a todos.

Un saludo.


Título: Re: Consulta ruta relativa
Publicado por: Chuidiang en 21 Mayo 2010, 15:28 pm
Si no pones ruta, el directorio por defecto es el de ejecución de la aplicación. Si lanzas tu aplicación con eclipse, es el raíz de tu proyecto (porque eclipse te lo pone así). Si lanzas un servidor web con eclipse, es el directorio de eclipse. Si despliegas tu war en un Tomcat, el ejecutable es tomcat y el directorio es el del ejecutable de Tomcat.

En cualquier caso, esa ruta siempre puedes saber cual es ejecutando

String rutaDefecto = System.getProperty("user.dir");

Si tu aplicación es una aplicación web, con jsp o servlets y es ahí donde quieres escribir el fichero, lo suyo es que le preguntes al ServletContext cual es el path de la aplicación tuya (normalmente webapps/tu_aplicacion) y escribas en ese path.

Se bueno.


Título: Re: Consulta ruta relativa
Publicado por: athlit en 21 Mayo 2010, 17:21 pm
Hola Chuidiang,
en primer lugar muchas gracias por responder.

Desconozco como funciona el ServletContext (se nota que soy nuevo?  :D), pero sabiendo eso ya me peleo para ver cómo puedo hacer lo que me dices. Es justo lo que necesitaba/buscaba.

Te agradezco mucho la ayuda!!
Un saludo!!


Título: Re: Consulta ruta relativa
Publicado por: athlit en 10 Junio 2010, 14:05 pm
Hola Chuidiang,
supongo que se verá que soy nuevo en esto...
Sigo con mi tema, no consigo saber la ruta relativa de la aplicacion donde ejecuto los JSP o Servlets.
Si creo un fichero en la raiz desde la app java, me la deberia crear en la raiz de mi aplicacion (entiendo), sin embargo me la crea en la raiz de Eclipse (si ejecuto eclipse) o de Apache (si lo cuelgo en el Tomcat). Bueno, nada nuevo, lo que te comenté... solo que me desespero, jeje.

Importo la clase javax.Servlet.ServletContext, pero no me deja ver sus metodos para intentar rescatar la INFO que quiero y que me comentas en tu post.

¿Que hago mal?

Muchas gracias por adelantado.

Un saludo.


Título: Re: Consulta ruta relativa
Publicado por: athlit en 10 Junio 2010, 16:33 pm
Chuidiang.... no me respondas, hoy he conseguido un pasito más.
Quiero mirar de sacarlo del todo ya.

Gracias y disculpa las molestias.

Un saludo!


Título: Re: Consulta ruta relativa
Publicado por: josco en 10 Junio 2010, 18:05 pm
yo tengo una clase que te regresa la ruta, donde estas trabajando, por ejemplo si corres el programa desde el ide te regresa la ruta donde se guardara, si ejecutas el jar te regresa la ruta donde esta el jar, asi si mueves el jar puedes usar esta clase para que te de la ruta donde esta el jar y al momento de guardar el fichero de texto le pones la ruta que te regresa esta clase y siempre se guardara donde tienes el .jar

Código:
import java.io.File;
import java.net.URL;

public class WorkingDirectory {

    private static File WORKING_DIRECTORY;

    public static File get() {
        if(WORKING_DIRECTORY == null) {
            try {
                URL url = WorkingDirectory.class.getResource("ejemplo.txt");
                System.out.println(url);
                if(url.getProtocol().equals("file")) {
                    File f = new File(url.toURI());
                    f = f.getParentFile()
                    .getParentFile()
                    .getParentFile();
                    WORKING_DIRECTORY = f;
                } else if(url.getProtocol().equals("jar")) {
                    String expected = "!/util/ejemplo.txt";
                    String s = url.toString();
                    s = s.substring(4);
                    s = s.substring(0, s.length() - expected.length());
                    File f = new File(new URL(s).toURI());
                    f = f.getParentFile();
                    WORKING_DIRECTORY = f;
                }
            } catch(Exception e) {
                WORKING_DIRECTORY = new File(".");
            }
        }
        return WORKING_DIRECTORY;
    }
    public String RutaJar()
    {
       
        return System.getProperty("user.dir"); // regresa la ruta
        System.out.print(System.getProperty("user.dir"));//imprime la ruta
    }




}

al llamar a rutajar te regresara la ruta del jar si lo ejecutas. si lo ejecutas desde el ide te regresa la ruta de la carpeta src


Título: Re: Consulta ruta relativa
Publicado por: athlit en 11 Junio 2010, 12:28 pm
Muchas gacias a ambos por vuestra ayuda, me habeis ayudado mucho.
Un saludo!


Título: Re: Consulta ruta relativa
Publicado por: infectado en 11 Junio 2010, 17:00 pm
 hola a todos eh soy nuevo me llamo esteban  x fa un favor alguien me puede ayudar a crear una clase en java que me permita hacer operaciones con polinomios xfa  no les pido todo pero si una ayuda soy estudiante ok saludos


Título: Re: Consulta ruta relativa
Publicado por: athlit en 11 Junio 2010, 18:13 pm
Hola infectado,
para buscar ayuda, lo ideal sería que crearas un hilo propio. Este hilo es para tratar otro tema diferente.
Desconozco lo que comentas, siento no poder ayudarte.

Un saludo.