IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Systeme] Forcer l'ouverture d'un fichier


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut [Systeme] Forcer l'ouverture d'un fichier
    Bonjour a tous

    Voila je vous explique mon soucis:

    Je voudrais connaitre la date de dernier reboot d'une machine sous windows.
    Pour cela j'ai eu l'idée de consulté la date de derniere modification du fichier de swap, a savoir, le pagefile.sys.
    Si dans une console j'arrive a obtenir les info que je souhaite, je voudrais, en java, ouvrir ce fichier et obtenir son attribut "lastModified()". Malheuresement java interdit l'ouverture de ce fichier. Malgré mes recherches je n'ai pas trouvé de solution... Alors si vous en avez une je suis preneur!!

    D'avance merci.

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Heureusement que Java n'arrive pas à ouvrir ce fichier.

    Mais comment accèdes-tu au fichier?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Ben heuresement non ... dans mon cas.
    sous la console je lance juste un dir c:\pagefile.sys /a:s
    ce qui me donne les infos du fichier de swap et sa date de derniere modif(ce qui m'interresse..)

    Je me doute bien que java ne peut ouvrir ce fichier, mais a la limitte je voudrais juste sa date de derniere modif.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    ...Ou alors une solution java pour connaitrela date de dernier reboot d'une machine...

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Au pire, tu peux lancer une commande "console" avec java et parser le résultat (je sais c'est vraimentr pas très ésthétique mais c'est faisable)

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    File pageFile = new File("C:\\pagefile.sys");
    System.out.println(pageFile.exists() + " " + pageFile.lastModified());
    Mais Java n'arrive pas à lire la date de la dernière modification sinon il te reste la solution d'éxecuter ta commande shell avec la méthode process.

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    ben oui cette solution la je l'avais deja envisagé mais comme tu dis c'est vraiment pas beau et je voudrais m'abstreindre de ce genre de solution.

    En cherchant un peu sur le web j'ai trouvé pas mal d'outils qui donne cette date, et en etudiant le sources il font tous de la meme maniere cad qu'il consulte ce satané fichier de swap.

    Une autre idée??? lol

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Approfondir pour quelle raison Java n'arrive pas à lire cette maudite date.

    Une solution serait d'utiliser JNI et d'écrire un librairie en C.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Pour moi les raisons sont simples:

    1- ce fichier est un fichier systeme
    2- ce fichier est ouvert et utilisé

    Je n'ai trouvé aucune methode de "forcage".
    Sans doute il doit en exister une mais laquelle...

    En ce qui concerne la soluton "process" je suis en train de tenter mais je retrouve devant un obstacle, mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Process p = null;
    		try
    		{
    			p = Runtime.getRuntime().exec("dir c:\\pagefile.sys /a:s");
     
    			Scanner sc = new Scanner(p.getInputStream());
    			while (sc.hasNext())
    			{
    				System.out.println(sc.nextLine());
    			}
    		} catch (IOException e){e.printStackTrace();}

    J'ai un retour:

    java.io.IOException: CreateProcess: dir c:\pagefile.sys /a:s error=2

    Mais cela ne me parle pas.

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Dir est une commande interne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Process p = null;
          try
          {
             String[] dirCmd = {"cmd", "/C", "dir", "c:\\pagefile.sys", "/a:s"};
             p = Runtime.getRuntime().exec(dirCmd);
     
             Scanner sc = new Scanner(p.getInputStream());
             while (sc.hasNext())
             {
                System.out.println(sc.nextLine());
             }
          } catch (IOException e){e.printStackTrace();}

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci..

    ok pour le fait que dir est une commande interne mais pourquoi est ce que jarrive a faire cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p = Runtime.getRuntime().exec("ping -n 3 " + this.ip);
    ping n'est pas considéré comme commande interne??

  12. #12
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    non ping n'est pas une commande interne.

    La preuve est que tu trouves un fichier ping.exe ou ping.com mais pas de fichier dir.exe.

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par oliverbg1
    ping n'est pas considéré comme commande interne??
    Non c'est une application à part entière.

    La méthode Runtime.exec() permet de lancer une application (c'est à dire un fichier binaire dans le PATH de ton système). ping est dans ce cas puisqu'il s'agit d'un exécutable que tu peux retrouver dans le répertoire System32 de Windows...

    A l'inverse, tu ne peux pas trouver l'exécutable de dir (tu peux faire une recherche pour vérifier) car il ne possède pas de fichier exécutable propre : il est contenu dans cmd.exe.

    Lorsque tu es dans un console DOS, en réalité tu es déjà dans le programme cmd, et lorsque tu tapes une commande, ce dernier vérifie d'abord que cette commande ne fait pas partie de ses commandes internes, et dans ce cas il se contente d'appeller le code correspondant, sinon il lance l'exécutable correspondant...

    Pour vérifier, ouvres le menu "Démarrer" et la boite "Exécuter".
    Si tu tapes ping tu vas apercevoir une console qui va s'ouvrir et se refermer de suite, mais si tu tapes dir tu auras un message d'erreur...


    Enfin attention car si ton application doit tourner sur du Windows 9x, il faudra utiliser command.com à la place de cmd.exe...

    a++

    [edit] grilled !

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Logique... ;-)

    Merci a tous!

  15. #15
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Peut-être peux-tu intéroger la base WMI de windows pour obtenir ce type d'info.

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    La base WMI?

    Explique toi stp..

  17. #17
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    WMI est l’implémentation de Microsoft du standard WBEM Web Bases Enterprise Management.
    pour plus d'info : http://laurent-dardenne.developpez.com/articles/wmi-p1/

    Je l'ai déjà utilisé en VB ça peut se consulter comme un BDD.

    Donc normalement en ODBC tu devrais pouvoir l'intéroger.

    un exemple non JAVA pour récupérer l'uptime par script vbs :
    http://www.microsoft.com/technet/scr...4/hey0907.mspx

    Quelques exemples d'implémentation en JAVA:

    http://www.javaworld.com/javaworld/j...windowspm.html
    http://forum.java.sun.com/thread.jsp...sageID=3564655

    Et un projet sourceforge :
    http://wbemservices.sourceforge.net/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forcer l'ouverture d'un fichier avec Excel
    Par Cda01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2011, 15h47
  2. [SP-2010] Forcer l'ouverture d'un fichier Excel sur une page Web
    Par magic-moad dans le forum SharePoint
    Réponses: 5
    Dernier message: 21/09/2011, 11h05
  3. [Débutant] Opendialog - Forcer l'ouverture d'un fichier
    Par seiken02 dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2010, 00h33
  4. [systeme]Ouverture aut. de fichiers d'une certaine extension
    Par AnKhCHFR dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 23/08/2005, 17h06
  5. [Système] ouverture d'un fichier pdf
    Par joneil dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 17/05/2005, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo