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