【问题标题】:How to get absolutePath of a usb device on linux/ubuntu with java如何使用 java 在 linux/ubuntu 上获取 USB 设备的 absolutePath
【发布时间】:2017-10-10 07:33:57
【问题描述】:

我正在研究一种将存储在 USB 设备上的文件导入我的数据库的方法。 我已经为 Mac 和 Windows 完成了它,但是当应用程序在 Linux/Ubuntu 和 java 下使用时,我不知道如何获取 USB 设备的路径。 有没有办法找到路径?

【问题讨论】:

  • 跟随/media/...的路径
  • Fedora 系统至少不再自动挂载在/media 上。假设所有 Linux 系统都以相同的方式处理可移动媒体是有问题的。不幸的是,他们没有。

标签: java linux ubuntu file-io


【解决方案1】:

我认为没有任何方法可以保证在所有 Linux 系统上都能正常工作。我使用了几种方法,取得了不同程度的成功。

一种不需要外部实用程序的方法是枚举和解析/dev/disk/proc/mounts/sys/bus/usb 中的伪文件,并构建保存存储的USB 设备的表示。可能不止一个,因此您可能仍需要做出一些猜测,或为用户提供选择。这是一个相当乏味的方法,但我认为它是最通用的。你可以看看/media/run/media,就像其他人建议的那样,但这仅适用于某些 Linux 安装,并且仅在启用了这种形式的自动挂载时才有效。

一种不那么繁琐的方法是从您的程序中调用实用程序udisksctl。我认为这个实用程序几乎适用于所有 Linux 变体,但并不总是默认安装。必须解析实用程序的输出,但直接使用内核 psedofile 会更轻松。

要获取磁盘设备列表,请执行udisksctl status。这将告诉您型号名称,通常包括文本“USB”和块设备(例如,/dev/sdb)。然后您可以执行udisksctl info -b /dev/sdb 并查找以“MountPoints”开头的行。如果设备未挂载,您可以根据需要通过执行udisksctl mount... 强制它。 udisksctl 还可以做很多其他有用的事情——请参阅它的手册页。

在 Java 中,您可以使用 Runtime.exec() 来运行 udisksctl,但是通过检查 /usr/bin/udisksctl 的存在来检查它是否已安装可能对用户更友好。

【讨论】:

    【解决方案2】:

    我发现最简单的方法是使用 Volumes 目录。

    /Volumes/NAME_OF_USB_DRIVE/file.whatever

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2015-06-04
      • 2013-08-10
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多