Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment récupérer la date de modification de la classe ?

7 réponses
Avatar
JFA
Bonjour.
J'ai mes classes dans un jar.
L'une d'elle (placée dans un package) veut récupérer sa date de modification
(lasModified).
J'ai essayé sans succès d'utiliser this.getClass().getName() pour récupérer
le fichier.
Puis this.getClass().getResource() mais le getResource() me réclame le nom
du fichier.
Je tourne en rond.
Merci de m'aider.

7 réponses

Avatar
Simon OUALID
Euh, getClass().getResource("./" + getClass().getName() + +".class");

Quelque chose dans ce gout la devrait fonctionner, non ?

Symon

JFA wrote:
Bonjour.
J'ai mes classes dans un jar.
L'une d'elle (placée dans un package) veut récupérer sa date de modification
(lasModified).
J'ai essayé sans succès d'utiliser this.getClass().getName() pour récupérer
le fichier.
Puis this.getClass().getResource() mais le getResource() me réclame le nom
du fichier.
Je tourne en rond.
Merci de m'aider.




Avatar
JFA
Merci de me répondre.
J'avais essayé d'utiliser getClass().getResource("./" + getClass().getName()
+ ".class");
Ce que je ne comprends pas c'est pourquoi ça marche pour un fichier se
trouvant dans la racine du Jar et que ça ne marche pas pour un fichier se
trouvant dans un package.
Peut-être parce que le chemin retourné par getName() est délimité par des
points et non des slashes ?
Avatar
Alain
Merci de me répondre.
J'avais essayé d'utiliser getClass().getResource("./" + getClass().getName()
+ ".class");


dans le class.getName tu as aussi le package
genre java.util.Date

tu as deux moyen de résoutre ton soucis :

soit partit de la base des classes et ajouter le nom en remplasant les .
par des /

getClass().getClassLoader().getRessource(getClass().replace('.','/'))+".class"

sinon juste récupérer le petit nom de la classe

String nm=getClass().getName();
nm=nm.substring(nm.lastIndexOf('.')+1);
getClass().getResource("./" + nm + ".class"





Ce que je ne comprends pas c'est pourquoi ça marche pour un fichier se
trouvant dans la racine du Jar et que ça ne marche pas pour un fichier se
trouvant dans un package.
Peut-être parce que le chemin retourné par getName() est délimité par des
points et non des slashes ?




Avatar
JFA
Il faut dons mettre les mains dans le cambouis.
J'avais pensé que Java proposerait une méthode qui ferait ce travail.
Merci en tous cas.

tu as deux moyen de résoutre ton soucis :

soit partit de la base des classes et ajouter le nom en remplasant les .
par des /

getClass().getClassLoader().getRessource(getClass().replace('.','/'))+".class"

sinon juste récupérer le petit nom de la classe

String nm=getClass().getName();
nm=nm.substring(nm.lastIndexOf('.')+1);
getClass().getResource("./" + nm + ".class"


Avatar
Simon OUALID
Ah oui effectivement, je voulais dire getSimpleName() [java5]. Ou comme
tu l'indiques, avec un indexOf.

Désolé ! ;)

Symon

Alain wrote:



Merci de me répondre.
J'avais essayé d'utiliser getClass().getResource("./" +
getClass().getName() + ".class");



dans le class.getName tu as aussi le package
genre java.util.Date

tu as deux moyen de résoutre ton soucis :

soit partit de la base des classes et ajouter le nom en remplasant les .
par des /

getClass().getClassLoader().getRessource(getClass().replace('.','/'))+".class"


sinon juste récupérer le petit nom de la classe

String nm=getClass().getName();
nm=nm.substring(nm.lastIndexOf('.')+1);
getClass().getResource("./" + nm + ".class"





Ce que je ne comprends pas c'est pourquoi ça marche pour un fichier se
trouvant dans la racine du Jar et que ça ne marche pas pour un fichier
se trouvant dans un package.
Peut-être parce que le chemin retourné par getName() est délimité par
des points et non des slashes ?





Avatar
Alain
Il faut dons mettre les mains dans le cambouis.
J'avais pensé que Java proposerait une méthode qui ferait ce travail.
Merci en tous cas.


c'est juste que j'ai suivi ton idée...
d'ailleurs ca marche pas toujours car la class
n'est pas nécessairement un fichier, mais un élémend dan,s un jar
ou un URL plus bizare...


mais il y a peut être mieux,
mais regarde alors dans ClassLoader

Avatar
Zazoun
Puisque ta classe est dans un .jar, tu peux utiliser JarURLConnection
et les classes du package java.util.jar.
Un petit exemple (à mettre dans un .jar pour qu'il fonctionne
correctement, évidemment :-)) :

import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.jar.JarEntry;

public class Test {

public static void main(String[] args) throws IOException {
System.out.println("entry.getTime() = " + new Date(new
Test().getTime()));
}

private long getTime() throws IOException {
final URL resource =
getClass().getResource(getClass().getName() + ".class");
JarURLConnection connection = (JarURLConnection)
resource.openConnection();
final JarEntry entry = connection.getJarEntry();
final long time = entry.getTime();
return time;
}
}