【问题标题】:Portable Device Path on WindowsWindows 上的便携式设备路径
【发布时间】:2011-01-29 16:37:18
【问题描述】:

我实际上有一个 Windows/Java 问题。我有一个插入式设备,我想通过 Java 访问它。通常你可以访问一个例如USB-Stick 通过驱动器号...但是此平板电脑在 Windows 中显示为“便携式设备”...这意味着路径类似于“计算机\爱可视 5S”并且没有驱动器号。

我想通过 Java 访问此设备上的文件,但我无法找出正确的路径。那里有一个类似的问题,但没有有效的答案。还是有其他方法可以通过 Java 访问此设备?


其实我还没有解决这个问题...我仍然无法通过java访问这样的设备。

目前我正在尝试使用 Java 访问 Windows ShellFolder。 Shellfolder,例如:“Shell:::{35786D3C-B075-49b9-88DD-029876E11C01}”

这可以用 Java 实现吗? 最近我发现了 sun.awt 类“ShellFolder”……这是想要的功能吗?

感谢您的帮助 日佩

【问题讨论】:

  • 我已经以“MSC”模式将我的设备连接到我的电脑,但我在我的电脑上看不到它: 这种模式 - MSC(大容量存储类) - 是仅适用于将插入的 ARCHOS Internet 平板电脑识别为外部硬盘驱动器的 Linux 计算机。对于高级 Windows 用户,可以从 Internet 获取驱动程序(使用风险自负 - ARCHOS 技术支持团队不支持),这将允许您将 Ext3 类型的分区安装为 Windows 计算机上的外部硬盘驱动器。 wiki.archosfans.com/index.php?title=Archos_FAQ
  • 更多... USB 连接模式下的选项 MSC 和 MTP 对我有什么作用? 这些是它如何连接到计算机的协议。 MSC(海量存储类)是最常见的 USB 连接方法。 MTP(媒体传输协议)是常规文件和 Windows Media Player 文件的智能传输系统。如果您使用的是 Windows,则应以 MTP 模式连接。如果您使用的是 Linux,那么您应该以 MSC 模式连接。

标签: java windows device tablet drive-letter


【解决方案1】:

使用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 上的回答。

【讨论】:

    【解决方案2】:

    像 *nix 系统一样,所有设备(包括驱动器)都有属于公共根目录的路径,这通常对用户隐藏,因为他们使用作为这些基本路径别名的驱动器号,但您也可以使用完整的通过在路径前加上 "\\.\" 前缀的设备路径

    例如,在我的机器 D 上:翻译为 "\Device\HarddiskVolume1",可以通过将 "\\.\HarddiskVolume1" 传递给 CreateFile 来访问。

    所以您设备的路径可能是"\\.\Archos 5s"

    【讨论】:

    • 谢谢...这似乎是正确的方法,尽管我的问题到现在还没有解决。我无法通过“\\.\ - 参数”访问任何驱动器或“Archos 5S”。但我找到了这个链接:docs.plt-scheme.org/reference/windowspaths.html 然后我尝试通过“\\?\C:”访问驱动器和这行得通...但它不适用于“\\?\Archos 5S”。你知道为什么吗?提前谢谢成熟
    • 尝试使用GetLogicalDriveStringsQueryDosDevice 也许您的设备已经有别名,即使它不是驱动器号。
    • 查看这个简单的 C 程序以获取枚举所有设备的示例。 pastebin.com/Y3pGu5hS
    • 非常感谢。实际上我找不到等效的 Java 方法...因为我必须使用 Java。只有“File.listRoots()”返回所有可用的 Drive-letters。
    【解决方案3】:

    您可以随时下载并安装 Windows 移动开发者 Powertoys (http://www.microsoft.com/download/en/details.aspx?id=10601) 并使用命令行实用程序 cecopy 从设备复制到设备,您可以从任何编程语言运行它。那里也有其他选择,但它主要针对 .Net

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 2013-05-19
      • 2023-03-11
      • 2014-02-22
      • 1970-01-01
      • 2011-07-09
      • 2013-11-24
      • 1970-01-01
      相关资源
      最近更新 更多