2010-03-20 10 views
6

Tengo una pregunta de Windows/Java. Tengo un dispositivo conectado al que quiero acceder a través de Java. Normalmente puede acceder a, p. USB-Stick a través de la letra de la unidad ... pero Windows muestra esta tableta como un "Dispositivo portátil" ... lo que significa que la ruta es algo así como "Computadora \ Archos 5S" y no hay letra de unidad.Ruta de dispositivo portátil en Windows

Quiero acceder a un archivo en este dispositivo a través de Java, pero no puedo encontrar la ruta correcta. Hay una pregunta similar, pero sin una respuesta productiva. ¿O hay otra forma de acceder a este dispositivo a través de Java?


Actualmente no he resuelto este problema ... Todavía no puedo acceder a dicho dispositivo a través de java.

Por el momento estoy intentando acceder a un ShellFolder de Windows en Java. Un ShellFolder como: "Shell ::: {35786D3C-B075-49b9-88DD-029876E11C01}"

Es esto posible con Java? Recientemente descubrí sun.awt class "ShellFolder" ... ¿es esta la función deseada?

gracias por su ayuda Ripei

+0

* He conectado mi unidad a mi PC en el modo "MSC", pero no puedo verla en mi computadora: * Este modo - MSC (clase de almacenamiento masivo) - es solo para computadoras con Linux que reconocerán un enchufe -en ARCHOS Internet Tablet como un disco duro externo. Para usuarios avanzados de Windows, es posible obtener controladores (bajo su propio riesgo, NO compatibles con el equipo de soporte técnico de ARCHOS) de Internet que le permitirán montar particiones de tipo Ext3 como un disco duro externo en su computadora con Windows. http://wiki.archosfans.com/index.php?title=Archos_FAQ – ecle

+0

Más ... * ¿Qué hacen las opciones MSC y MTP en el modo de conexión USB para mí? * Estos son los protocolos de cómo se conecta a un ordenador. MSC (clase de almacenamiento masivo) es el método de conexión USB más común. MTP (Media Transport Protocol) es un sistema de transporte inteligente para archivos regulares y archivos de Windows Media Player. Si está usando Windows, debe conectarse en modo MTP.Si está utilizando Linux, entonces debe conectarse en modo MSC. – ecle

Respuesta

2

igual que los sistemas * nix, todos los dispositivos (incluyendo unidades) tienen caminos que forman parte de una raíz común, esto normalmente se oculta a los usuarios, ya que utilizan las letras de unidad que son los alias a estos caminos fundamentales, pero también se puede utilizar rutas de dispositivo completo con el prefijo de la ruta con "\\.\"

por ejemplo, en mi máquina D: se traduce como "\Device\HarddiskVolume1" y se puede acceder mediante el paso "\\.\HarddiskVolume1" a CreateFile.

Así que la ruta a su dispositivo es probablemente "\\.\Archos 5s".

+0

gracias ... esta parece ser la manera correcta, aunque mi problema no está resuelto hasta ahora. No puedo acceder a ningún disco o "Archos 5S" a través del "\\. \ - Paramter. Pero encontré este enlace: http://docs.plt-scheme.org/reference/windowspaths.html Entonces traté de acceder a una unidad a través de "\\? \ C:" y esto funciona ... pero no funciona para "\\? \ Archos 5S". ¿tienes alguna idea de por qué? gracias de antelación ripei – Ripei

+0

Trate de usar '' GetLogicalDriveStrings' y QueryDosDevice' tal vez el dispositivo ya tiene un alias, incluso si no es una letra de unidad –

+0

ver este programa simple en C para un ejemplo de enumerar todos los dispositivos http:..//pastebin.com/Y3pGu5hS –

0

siempre puede descargar e instalar el desarrollador de Windows Mobile Powertoys (http://www.microsoft.com/download/en/details.aspx?id=10601) y copiar desde y hacia el dispositivo utilizando la utilidad de línea de comandos cecopy, que puedes ejecutar desde cualquier lenguaje de programación. Hay otras opciones allí también, pero más se dirigen a .Net

4

La solución al problema anterior usando la biblioteca JMTP en https://code.google.com/p/jmtp/

Aquí está mi código

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(); 

    } 
} 

No se olvide de añadir jmtp.dll archivos (que viene con la descarga de jmtp) como una biblioteca nativa. Para obtener más información, consulte mi respuesta en Including Native Library in Netbeans.