我实际上有一个Windows / Java问题。我有一个插件设备,我想通过Java访问。通常你可以访问例如USB-Stick通过驱动器号...但这个平板电脑被Windows显示为“便携式设备”...这意味着,路径类似于“Computer \ Archos 5S”,并且没有驱动器号。
我想通过Java访问此设备上的文件,但我无法弄清楚它的正确路径。有一个类似的问题,但没有一个有效的答案。或者是否有另一种通过Java访问此设备的方法?
其实我没有解决这个问题......我仍然无法通过java访问这样的设备。
目前我正在尝试使用Java访问Windows ShellFolder。 一个Shellfolder如:“Shell ::: {35786D3C-B075-49b9-88DD-029876E11C01}”
这可能与Java有关吗? 最近我发现了sun.awt类“ShellFolder”......这是想要的功能吗?
感谢您的帮助 Ripei
答案 0 :(得分:4)
使用https://code.google.com/p/jmtp/
上的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下载)添加为本机库。有关详细信息,请参阅Including Native Library in Netbeans上的答案。
答案 1 :(得分:2)
与* nix系统一样,所有设备(包括驱动器)的路径都是公共根的一部分,这通常对用户隐藏,因为它们使用驱动字母作为这些基本路径的别名,但您也可以使用完整的设备路径的前缀为"\\.\"
例如,在我的机器上D:翻译为"\Device\HarddiskVolume1"
,可以通过将"\\.\HarddiskVolume1"
传递给CreateFile来访问。
因此,设备的路径可能是"\\.\Archos 5s"
。
答案 2 :(得分:0)
您可以随时下载并安装Windows移动开发人员Powertoys(http://www.microsoft.com/download/en/details.aspx?id=10601)并使用命令行实用程序cecopy从设备复制到设备,您可以从任何编程语言运行。还有其他选择,但它最有针对性.Net