Date de création d'un fichier texte

Résolu
zahenianis Messages postés 11 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 28 janvier 2011 - 7 févr. 2009 à 00:32
zahenianis Messages postés 11 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 28 janvier 2011 - 27 avril 2010 à 17:25
salut,
j'arrive pas à trouver la fonction qui me donne la date de création d'un fichier texte . J'ai regardé la classe File mais rien ne répond à mon besoin.
Merci d'avance pour celui ou celle qui va me répondre.

2 réponses

zahenianis Messages postés 11 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 28 janvier 2011
27 avril 2010 à 17:25
Au fait il est possible d'invoquer une méthode de windows dans un prg java et qui donne la date de création d'un fichier sauf que c'est pas portable.

//voici le code de la classe toute prête qui va faire le travail

import com.sun.jna.Pointer;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary;
import java.io.File;
import java.util.Calendar;


public class JNATime {

public interface Kernel32 extends StdCallLibrary {
/** constante pour CreateFileA */
public int FILE_SHARE_READ = 0x01;
/** constante pour CreateFileA */
public int OPEN_EXISTING = 3;

/** obtention d'un Handler sur un fichier */
Pointer CreateFileA(
String path,
int dwDesiredAccess,
int dwSharedMode,
Pointer lpSecurityAttr,
int dwCreationDisposition,
int dwFlagsAndAttributes,
Pointer hTemplateFile
);

/** copie dans les 3 pointeurs FILETIME les dates du fichier hFile */
boolean GetFileTime(Pointer hFile,
FILETIME lpCreationTime,
FILETIME lpLastAccessTime,
FILETIME lpLastWriteTime);

/** convertit une date windows en une structure plus lisible */
boolean FileTimeToSystemTime(
FILETIME lpFileTime,
SYSTEMTIME lpSystemTime);


/** récupération de la dernière erreur */
int GetLastError();

/** instanciation de la library */
public Kernel32 INSTANCE = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class);
}

/** structure contenant une date sous forme de long au format windows */
public static class FILETIME extends Structure {
public int dwLowDateTime;
public int dwHighDateTime;
}

/** structure éclatée d'une date */
public static class SYSTEMTIME extends Structure {
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;

//}
public long getTime() {
Calendar c = Calendar.getInstance();
c.set(wYear, wMonth-1, wDay, wHour, wMinute, wSecond);
c.set(Calendar.MILLISECOND, wMilliseconds);
return c.getTimeInMillis();
}
}
/** obtention de la date de création du fichier fourni en path */
public static long getCreationDate(String path) {

File pathFile = new File(path);
if(pathFile.isFile()){
Kernel32 lib = Kernel32.INSTANCE;

//récupération d'un handle sur le fichier
Pointer hFile = lib.CreateFileA(
path,
0,
Kernel32.FILE_SHARE_READ,
null,
Kernel32.OPEN_EXISTING,
0,
null);

int error = lib.GetLastError();
if (error!=0) {
throw new IllegalArgumentException("k32 error : "+error);
}

FILETIME crea = new FILETIME();

//récupération des dates du fichier
boolean res = lib.GetFileTime(hFile,crea,null,null);
if (!res) {
error = lib.GetLastError();
throw new IllegalArgumentException("k32 error : GetFileTime failed "+error);
}

SYSTEMTIME creasys = new SYSTEMTIME();

//conversion en une structure de date utilisable
//à noter que l'heure ne varie pas avec l'horaire hiver/été
res = lib.FileTimeToSystemTime(crea, creasys);
if (!res) {
error = lib.GetLastError();
throw new IllegalArgumentException("k32 error : FileTimeToSystemTime failed "+error);
}

return creasys.getTime();

} return 0;
}
}

//cool non ?

//Et là c'est un exemple d'appel de cette classe :

//Date de création
String getDateCreation(nomFichier) //simple méthode
{
long d = JNATime.getCreationDate(nomFichier.getPath());
Date date = new Date(d);
DateFormat frm = DateFormat.getDateTimeInstance();
return (frm.format(date));//retourne la date de création

}
3
amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 1
12 févr. 2009 à 17:51
Salut,

Il n'est, à ma connaissance, pas possible de connaître la date de création d'un fichier en Java, à cause de problèmes de portabilité. La seule info à récupérer peut être la date de dernière modification avec la méthode lastModified().

A +

amundain

Java bien,merci.
0
Rejoignez-nous