Java: список камер, которые подключены - PullRequest
6 голосов
/ 27 июня 2011

Моя программа в настоящее время получает список дисков, подключенных к компьютеру с File.listRoots().Но когда я подключаю камеру или MP3-плеер непосредственно к компьютеру (вместо того, чтобы вставить карту памяти), он не отображается в списке и не имеет буквы диска в Windows Explorer.Например, вот местоположение моей камеры:

Computer\Canon PowerShot SD750\Removable storage

Как я могу также перечислить камеры / другие устройства, у которых нет буквы диска?Я предполагаю, что для этого потребуется какая-то библиотека JNI, но я точно не знаю точно.

Спасибо!

PS В отчаянии я попытался попробоватьперечислить содержимое Computer\;конечно, это не сработало.


Обновление : я нашел этот вопрос здесь: Путь к переносному устройству в Windows ;это именно та проблема, с которой я столкнулся, но там не найдено никакого решения.

Ответы [ 4 ]

2 голосов
/ 30 июня 2011

Java 7 имеет несколько перспективных классов в этой области, таких как: http://download.java.net/jdk7/docs/api/java/nio/file/FileSystem.html

Предполагая, что он вам нужен и для работы с Java 6, я бы предложил запустить скрипт оболочки и проанализировать еговыход.В Windows вы можете запустить mountvol, монтировать Unix / MacOS X и т. Д. Конечно, анализ выходных данных будет несколько утомительным, и вам придется беспокоиться о каждой ОС, в которой работает ваше приложение, но, по крайней мере ... не знаю, что именно.... это работает?

Здесь - это пример кода, который кажется полезным для Windows:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * from Win32_Volume")

For Each objItem In colItems
    WScript.Echo "Automount: " & objItem.Automount
    WScript.Echo "Block Size: " & objItem.BlockSize
    WScript.Echo "Capacity: " & objItem.Capacity
    WScript.Echo "Caption: " & objItem.Caption
    WScript.Echo "Compressed: " & objItem.Compressed
    WScript.Echo "Device ID: " & objItem.DeviceID
    WScript.Echo "Dirty Bit Set: " & objItem.DirtyBitSet
    WScript.Echo "Drive Letter: " & objItem.DriveLetter
    WScript.Echo "Drive Type: " & objItem.DriveType
    WScript.Echo "File System: " & objItem.FileSystem
    WScript.Echo "Free Space: " & objItem.FreeSpace
    WScript.Echo "Indexing Enabled: " & objItem.IndexingEnabled
    WScript.Echo "Label: " & objItem.Label
    WScript.Echo "Maximum File Name Length: " & objItem.MaximumFileNameLength
    WScript.Echo "Name: " & objItem.Name
    WScript.Echo "Quotas Enabled: " & objItem.QuotasEnabled
    WScript.Echo "Quotas Incomplete: " & objItem.QuotasIncomplete
    WScript.Echo "Quotas Rebuilding: " & objItem.QuotasRebuilding
    WScript.Echo "Serial Number: " & objItem.SerialNumber
    WScript.Echo "Supports Disk Quotas: " & objItem.SupportsDiskQuotas
    WScript.Echo "Supports File-Based Compression: " & _
        objItem.SupportsFileBasedCompression
    WScript.Echo
Next

Вот вывод, который я получил для своей программы для чтения электронных книг:

Automount: True
Block Size: 4096
Capacity: 999120896
Caption: G:\
Compressed: 
Device ID: \\?\Volume{8e3b4ce5-a124-11e0-9d2b-e30c5839642d}\
Dirty Bit Set: False
Drive Letter: G:
Drive Type: 2
File System: FAT32
Free Space: 663683072
Indexing Enabled: 
Label: PocketBook9
Maximum File Name Length: 255
Name: G:\
Quotas Enabled: 
Quotas Incomplete: 
Quotas Rebuilding: 
Serial Number: 1276177233
Supports Disk Quotas: False
Supports File-Based Compression: False
1 голос
/ 11 октября 2012

Решение вышеуказанной проблемы с использованием библиотеки JMTP на

http://code.google.com/p/jmtp/

Вот мой код

    package jmtp;</p>

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

    }
}
</code>

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

http://stackoverflow.com/questions/12798530/including-native-library-in-netbeans
0 голосов
/ 30 июня 2011

Может быть, вы можете взглянуть на Morena Framework http://www.gnome.sk/Twain/jtp.htmlv (кажется, с открытым исходным кодом, но немного дороже, хотя есть бесплатная ознакомительная версия), это для TWAIN-совместимых сканеров / камер (Windows / MAC) или SANE (Linux или другой Unix-вариант), чтобы получить список подключенных устройств, вы можете сделать это:

import SK.gnome.morena.*;
import SK.gnome.twain.*;

public class Test
{
    public static void main(String[] args) throws Exception
    {
        TwainSource[] sources=TwainManager.listSources();
        if(sources == null) return;
        for(int i = 0; i < sources.length; i++)
        {
            System.out.println("Twain source is: " + ts.toString());
        }
    }
}

Может быть, это могло бы помочь, если нет, то, возможно, JMF - это возможное решение.

0 голосов
/ 30 июня 2011

Возможно, это не тот ответ, который вы ищете, но назначение буквы букве диска - это не вариант? Обычно вы можете сделать это вручную с USB-устройствами в Windows, используя Мой компьютер> щелкните правой кнопкой мыши> Управление> Хранилище.

Возможно , что CaptureDeviceManager в JMF (Java Media Framework) может помочь вам, но я в этом немного сомневаюсь.

...