2010-03-20 23 views
6

J'ai en fait une question Windows/Java. J'ai un périphérique branché auquel je veux accéder via Java. Normalement, vous pouvez accéder à un e.g. Clé USB via la lettre de lecteur ... mais cette tablette est affichée par Windows comme un "périphérique portable" ... ce qui signifie que le chemin est quelque chose comme "Computer \ Archos 5S" et il n'y a pas de lettre de lecteur.Chemin de périphérique portable sous Windows

Je veux accéder à un fichier sur cet appareil via Java, mais je n'arrive pas à trouver le bon chemin. Il y a une question similaire, mais sans réponse productive. Ou y a-t-il un autre moyen d'accéder à cet appareil via Java?


En fait, je n'ai pas résolu ce problème ... Je ne suis toujours pas en mesure d'accéder à un tel appareil via Java. En ce moment j'essaye d'accéder à un ShellFolder de Windows en Java. Un Shell comme: "Shell ::: {35786D3C-B075-49b9-88DD-029876E11C01}"

Est-ce possible avec Java? Récemment j'ai découvert la classe sun.awt "ShellFolder" ... est-ce la fonctionnalité recherchée?

Merci pour votre aide Ripei

+0

* J'ai connecté mon appareil à mon PC en mode "MSC", mais je ne le vois pas sur mon ordinateur: * Ce mode - MSC (Mass Storage Class) - est uniquement pour les ordinateurs Linux qui reconnaissent un ordinateur branché -in ARCHOS Internet Tablet comme un disque dur externe. Pour les utilisateurs Windows avancés, il est possible d'obtenir des pilotes (à vos risques et périls - NON supportés par l'équipe de support technique ARCHOS) sur Internet qui vous permettront de monter des partitions de type Ext3 en tant que disque dur externe sur votre ordinateur Windows. http://wiki.archosfans.com/index.php?title=Archos_FAQ – ecle

+0

Plus ... * Que font les options MSC et MTP en mode de connexion USB pour moi? * Voici les protocoles de connexion un ordinateur. MSC (Mass Storage Class) est la méthode de connexion USB la plus courante. MTP (Media Transport Protocol) est un système de transport intelligent pour les fichiers ordinaires et les fichiers Windows Media Player. Si vous utilisez Windows, vous devez vous connecter en mode MTP.Si vous utilisez Linux, vous devez vous connecter en mode MSC. – ecle

Répondre

2

Comme les systèmes * nix, tous les appareils (y compris les lecteurs) ont des chemins qui font partie d'une racine commune, ce qui est normalement caché des utilisateurs, car ils utilisent les lettres de lecteur qui sont des alias à ces chemins fondamentaux, mais vous pouvez également utiliser des chemins de l'appareil complet en préfixant le chemin avec "\\.\"

par exemple, sur ma machine D: comme "\Device\HarddiskVolume1" et traduit est accessible en passant "\\.\HarddiskVolume1" à CreateFile. Le chemin d'accès à votre périphérique est probablement "\\.\Archos 5s".

+0

merci ... cela semble être la bonne façon bien que mon problème ne soit pas résolu jusqu'à présent. Je ne suis pas en mesure d'accéder à un lecteur ou le "Archos 5S" via le "\\. \ - Paramter.Mais j'ai trouvé ce lien: http://docs.plt-scheme.org/reference/windowspaths.html Ensuite, j'ai essayé d'accéder à un lecteur via "\\? \ C:" et cela fonctionne ... mais cela ne fonctionne pas pour "\\? \ Archos 5S" vous avez une idée pourquoi? merci à l'avance ripei – Ripei

+0

Essayez d'utiliser '' GetLogicalDriveStrings' et peut-être le QueryDosDevice' votre appareil a déjà un alias, même si ce n'est pas une lettre de lecteur –

+0

voir ce programme simple C pour un exemple de tous les périphériques énumérant http:..//pastebin.com/Y3pGu5hS –

0

Vous pouvez toujours télécharger et installer le développeur Windows Mobile Powertoys (http://www.microsoft.com/download/fr/details.aspx?id=10601) et copier depuis et vers l'appareil à l'aide de l'utilitaire de ligne de commande cecopy, que vous pouvez utiliser depuis n'importe quel langage de programmation. Il y a d'autres options là aussi, mais il est le plus ciblé à .Net

4

La solution à problème ci-dessus en utilisant la bibliothèque JMTP sur https://code.google.com/p/jmtp/

Voici mon code

package jmtp; 

import be.derycke.pieter.com.COMException; 
import be.derycke.pieter.com.Guid; 
import java.io.*; 
import java.math.BigInteger; 
import jmtp.PortableDevice; 
import jmtp.*; 

public class Jmtp { 

    public static void main(String[] args) { 
     PortableDeviceManager manager = new PortableDeviceManager(); 
     PortableDevice device = manager.getDevices()[0]; 
     // Connect to my mp3-player 
     device.open(); 

     System.out.println(device.getModel()); 

     System.out.println("---------------"); 

     // Iterate over deviceObjects 
     for (PortableDeviceObject object : device.getRootObjects()) { 
      // If the object is a storage object 
      if (object instanceof PortableDeviceStorageObject) { 
       PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object; 

       for (PortableDeviceObject o2 : storage.getChildObjects()) { 
//      
//      BigInteger bigInteger1 = new BigInteger("123456789"); 
//      File file = new File("c:/JavaAppletSigningGuide.pdf"); 
//      try { 
//       storage.addAudioObject(file, "jj", "jj", bigInteger1); 
//      } catch (Exception e) { 
//       //System.out.println("Exception e = " + e); 
//      } 
//      

        System.out.println(o2.getOriginalFileName()); 
       } 
      } 
     } 

     manager.getDevices()[0].close(); 

    } 
} 

Ne pas oublier d'ajouter jmtp.dll fichiers (qui vient avec le téléchargement jmtp) en tant que bibliothèque native. Pour plus d'informations, voir ma réponse au Including Native Library in Netbeans.