Путь к переносному устройству в Windows - PullRequest
6 голосов
/ 20 марта 2010

У меня действительно есть вопрос по Windows / Java. У меня есть подключенное устройство, к которому я хочу получить доступ через Java. Обычно вы можете получить доступ, например, USB-флешка через букву диска ... но этот планшет отображается в Windows как "Переносное устройство" ... что означает, что путь - это что-то вроде "Компьютер \ Archos 5S" и буква диска отсутствует.

Я хочу получить доступ к файлу на этом устройстве через Java, но не могу найти правильный путь к нему. Есть похожий вопрос, но без продуктивного ответа. Или есть другой способ получить доступ к этому устройству через Java?


На самом деле я не решил эту проблему ... Я до сих пор не могу получить доступ к такому устройству через Java.

В данный момент я пытаюсь получить доступ к Windows ShellFolder в Java. Папка Shell вроде: "Shell ::: {35786D3C-B075-49b9-88DD-029876E11C01}"

Возможно ли это с Java? Недавно я обнаружил класс sun.awt "ShellFolder" ... это разыскиваемая функция?

спасибо за вашу помощь Ripei

Ответы [ 3 ]

4 голосов
/ 11 октября 2012

Решение вышеуказанной проблемы с использованием библиотеки JMTP на https://code.google.com/p/jmtp/

Вот мой код

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

    }
}

Не забудьте добавить файлы jmtp.dll (которые входят в комплект загрузки jmtp) в качестве нативной библиотеки. Для получения дополнительной информации см. Мой ответ по Включая собственную библиотеку в Netbeans .

2 голосов
/ 20 марта 2010

Как и в * nix системах, все устройства (включая диски) имеют пути, являющиеся частью общего корня, обычно они скрыты от пользователей, поскольку они используют буквы дисков, которые являются псевдонимами этих основных путей, но вы также можете использовать полный пути к устройствам с префиксом пути с "\\.\"

Например, на моей машине D: переводится как "\Device\HarddiskVolume1" и может быть получен путем передачи "\\.\HarddiskVolume1" в CreateFile.

Таким образом, путь к вашему устройству, вероятно, "\\.\Archos 5s".

0 голосов
/ 18 марта 2012

вы всегда можете скачать и установить Windows Mobile для разработчиков Powertoys (http://www.microsoft.com/download/en/details.aspx?id=10601) и скопировать с устройства на устройство и обратно, используя утилиту командной строки cecopy, которую можно запустить с любого языка программирования. Есть и другие варианты, но наиболее нацелены на .Net

...