Date de création d'un fichier texte [Résolu]

Signaler
Messages postés
11
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
28 janvier 2011
-
Messages postés
11
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
28 janvier 2011
-
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

Messages postés
11
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
28 janvier 2011

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

}
Messages postés
110
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
28 août 2012
1
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.