2017-10-10 182 views
2

我正在處理將存儲在USB設備上的文件導入到數據庫的方法。 我已經在Mac和Windows上完成了它,但是我不知道如何在Linux/Ubuntu下使用java應用程序時獲取USB設備的路徑。 有沒有辦法找到路徑?如何使用java獲取USB設備在linux/ubuntu上的絕對路徑

+0

遵循路徑'/ media/...' –

+0

至少,Fedora系統不會在'/ media'上自動掛載。假設所有的Linux系統都以相同的方式處理可移動介質是有問題的。不幸的是,他們不這樣做。 –

回答

0

我不認爲有什麼方法可以保證在所有Linux系統上都能正常工作。我使用了幾種方法,取得了不同程度的成功。

不需要外部實用程序的方法是枚舉並解析/dev/disk,/proc/mounts/sys/bus/usb中的僞文件,並構建保存存儲的USB設備的表示形式。可能有不止一個,所以你可能仍然需要做出一些猜測,或者爲用戶提供一個選擇。這是一個非常乏味的方法,但我認爲它是最一般的方法。正如其他人所建議的,您可以只看/media,/run/media,但這隻適用於某些Linux安裝,並且僅在啓用了這種自動安裝形式時才適用。

一個不繁瑣的方法是從您的程序調用實用程序udisksctl。我認爲這個實用程序幾乎適用於所有Linux版本,但並不總是默認安裝。該實用程序的輸出必須被解析,但直接使用內核pfeofiles的麻煩較少。

要獲取磁盤設備列表,請執行udisksctl status。這會告訴你型號名稱,它通常包含文本「USB」和塊設備(例如/ dev/sdb)。然後,您可以執行udisksctl info -b /dev/sdb並查找開始「掛載點」的行。如果設備未掛載,則可以根據需要執行udisksctl mount...。還有一堆udisksctl可以做的其他有用的東西 - 請參閱其手冊頁。

在Java中,您可以使用Runtime.exec()來運行udisksctl,但用戶可能通過檢查是否存在/usr/bin/udisksctl來檢查它是否安裝在第一位。