viernes, 7 de mayo de 2010

Fecha de creación en Java

Un tema que acabo de descubrir gracias a una pregunta planteada en Debug Mode On.
Nunca me había encontrado con la necesidad de acceder a la fecha de creación de un archivo desde un programa Java, y como todos, al ver la pregunta pensé que sería tan simple como buscar un método tal que getCreationDate en el API... pues no.

Resulta que, por el momento, Java no ofrece ninguna opción para acceder a este dato, según parece por aquello de que pretende ser multiplataforma, y la fecha de creación no se puede recuperar en todos los sistemas operativos.

Así que hay que hay que buscarse la vida. Por lo que he podido leer, se plantean dos posibles alternativas para solventar este problema. Por un lado, hacer una llamada a nuestro sistema desde el código, y parsear la respuesta. Por otro, utilizar JNI.

Y, ¿qué es JNI? Pues una más de las muchas siglas que componen nuestro peculiar lenguaje. Java Native Interface, básicamente, sirve para poder invocar desde Java programas desarrollados en otros lenguajes. Por tanto, la solución la tenemos en hacer un programa en cualquier lenguaje que te permita consultar la fecha de creación, e invocarlo a través de JNI.

Si navegáis por ese maravilloso mundo que es Internet encontraréis varias páginas con código para ambas alternativas.

Por cierto, que según comenta GreenEyed en el hilo del comienzo de esta entrada, se está trabajando en la JSR-203, que proporcionará alguna forma de acceder a información proporcionada específicamente por cada sistema operativo, con lo que se acabarían nuestros problemas.

3 comentarios:

  1. import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.SftpException;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.attribute.BasicFileAttributes;

    /**
    *
    * @author fmoraga
    */
    public class FTP {
    public static void main (String ... args) throws IOException {
    Path file = Paths.get("C:\\Users\\fmoraga\\Documents\\lib\\test.txt");
    BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);

    System.out.println("creationTime: " + attr.creationTime());
    System.out.println("lastAccessTime: " + attr.lastAccessTime());
    System.out.println("lastModifiedTime: " + attr.lastModifiedTime());
    }
    }

    ResponderEliminar
  2. Con esto se obtiene las 3 fechas importantes.

    ResponderEliminar
  3. gracias por este método para leer las fechas se te agradece!

    ResponderEliminar

Cualquier aportación será bienvenida