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

Langage Java Discussion :

Valeur des champs de propriété des disques


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Valeur des champs de propriété des disques
    Bonjour à tous,

    Je sais que c'est assez contraire aux principes d'un forum, mais je me permets de créer un doublon d'un post que je pensais cohérent à la section Windows. A priori, le point de vue d'un programmeur JAVA est également essentiel à ce cas, car peut être l'un d'entre vous a déjà rencontré ce cas de figure. Voici le dit post (http://www.developpez.net/forums/d11...riete-disques/) :

    Ma question est à la fois simple est compliquée =)
    Je cherche à récupérer le type d'un disque (en JAVA notamment) pour construire une liste des disques amovibles connectés à l'ordinateur quelle que soit la langue d'installation de Windows.
    Je m'explique, lorsque vous êtes dans l'explorateur et que vous ouvrez les propriétés d'un disque, vous obtenez ceci :



    Le champ entouré en rouge est la valeur qui m'intéresse, car je suis capable de la récupérer dans mon programme. Pour savoir si le disque est bien amovible, je compare ce champ à une valeur (="Disque Amovible") que je crée moi même.

    Or je veux m'affranchir de créer moi même cette valeur de comparaison car je suis limité à mon propre champ de langues, et surtout à l'alphabet latin. Mon but est de pallier à cela en récupérant si elle existe, par exemple un clé de registre, un valeur dans une DLL, qui a cette valeur par défaut. Ma question est donc : quelqu'un sait-il où Windows va chercher cette valeur?

    Côté technique j'utilise File.listRoots() et je parcours cette liste en comparant la description de chaque File (FileSystemView.getSystemTypeDescription(file)) à deux String que je déclare comme valant "Removable disk" et "Disque amovible". Je suis donc limité à anglais et français. Cela ne fonctionnera pas sur un OS d'une autre langue.

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Salut, je ne crois pas que ce soit possible de récupérer cette information directement en java.

    Je vois 2 solutions :
    1 - écrire toi même une dll qui appellera la méthode GetDriveType de l'api windows. Tu pourras appeler cette dll grâce à jni.
    2 - en java, tu récupères le type du lecteur C: grâce à ta méthode précédente, et ensuite tu compares cette valeur avec les autres disques. Ce n'est pas optimale car tu dois connaitre à l'avance la lettre d'un lecteur local, le lecteur C: n'est pas forcément local. Mais cela pourrait être un paramètre de ton application. Ou en utilisant new File() tu récupèreras le répertoire d'exécution de ton application, la plupart du temps c'est un disque local...

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Si tu ne vise que du windows, pour moi le plus simple est d'utiliser une api native, il est assez facile en se documentant un peu de charger un dll via jna.

  4. #4
    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 tchize_ Voir le message
    Si tu ne vise que du windows, pour moi le plus simple est d'utiliser une api native, il est assez facile en se documentant un peu de charger un dll via jna.
    +1
    A partir du moment où la librairie native utilises des types simples (pas de structures trop complexe), JNA et son "Direct Mapping" permet de faire cela en un rien de temps sans avoir à toucher la moindre ligne de code natif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Kernel32 {
    	static {
    		Native.register("Kernel32"); // nom de la librairie native
    	}
     
    	public static native int GetDriveTypeA(String rootPathName);
    }

    En plus on peut facilement cacher cela en private pour faire une joli surcouche Java plus propre



    a++

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut à tous !

    Merci d'avoir pris le temps de me réponde. Effectivement j'ai pensé à ces solutions, mais nous aurions voulu éviter de faire appel à JNA ou une DLL perso. J'avais également regardé du côté de JNI si vous connaissez qui me semble être relativement sympa.

    Je vais faire quelque chose de propre et je vous tiendrai au jus. J'ai cru comprendre que l'appli devra être portée sous UNIX à terme donc je risque de devoir faire autrement.

    A plus et bonne journée

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    La notion que vous cherchez à capter n'existe pas vraiment sous linux. De ce coté la vous allez devoir jouer avec les fichiers dans /proc pour analyser les disques, les partitions et leur point de montage.

  7. #7
    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
    Citation Envoyé par Bkoss Voir le message
    Effectivement j'ai pensé à ces solutions, mais nous aurions voulu éviter de faire appel à JNA ou une DLL perso.
    Malheureusement il s'agit d'une notion très spécifique à l'OS hôte, ce qui introduit donc du code natif à un moment où à un autre...

    Citation Envoyé par Bkoss Voir le message
    J'avais également regardé du côté de JNI si vous connaissez qui me semble être relativement sympa.
    JNA permet surtout d'appeler directement le code natif, sans avoir à coder quoi que ce soit en natif... contrairement à JNI.

    Citation Envoyé par Bkoss Voir le message
    Je vais faire quelque chose de propre et je vous tiendrai au jus. J'ai cru comprendre que l'appli devra être portée sous UNIX à terme donc je risque de devoir faire autrement.
    Je ne pense pas qu'il existe d'API commune pour cela, même en natif. Donc tu vas devoir avoir plusieurs implémentations (une par type de système supporté).


    a++

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  2. Réponses: 1
    Dernier message: 27/04/2012, 16h41
  3. Valeur des champs de propriété des disques
    Par Bkoss dans le forum Windows XP
    Réponses: 0
    Dernier message: 22/02/2012, 11h53
  4. Comment ajouter des champs a partir des valeurs d'un autre champ ?
    Par zerkz dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/05/2007, 12h05
  5. ADOX propriétés des champs
    Par thierry007 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/11/2006, 18h48

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