2017-10-10 55 views
2

私は、usbデバイスに保存されているファイルを自分のデータベースにインポートする方法に取り組んでいます。 私はすでにMacとWindows用に行っていますが、Linux/UbuntuとJavaの両方でアプリケーションを使用している場合、usbデバイスへのパスを取得する方法はわかりません。 パスを見つける方法はありますか?linux/ubuntuでusbデバイスの絶対パスを取得する方法

+0

'/ media/...'に従ってください。 –

+0

Fedoraシステムは、少なくとも '/ media'に自動マウントしません。すべてのLinuxシステムが同じようにリムーバブルメディアを扱っていると仮定するのは問題です。残念ながら、彼らはしません。 –

答えて

0

すべてのLinuxシステムで動作する保証はありません。私が使用したいくつかのアプローチがあり、さまざまな程度の成功があります。

外部のユーティリティを必要としない方法が列挙し、/dev/disk/proc/mounts、および/sys/bus/usbで疑似ファイルを解析し、ストレージを保持するUSB​​デバイスの表現を構築することです。複数のものがあるかもしれないので、あなたはまだ推測をしなければならないかもしれないし、ユーザーに選択肢を提供しなければならないかもしれません。これはかなり退屈な方法ですが、私はそれが最も一般的だと思います。ほかの誰かが示唆しているように、/media,/run/mediaを見ることができますが、これはLinuxインストールの一部でしか動作しません。その形式の自動マウントが有効な場合のみです。

あまり面倒なアプローチは、プログラムからユーティリティudisksctlを呼び出すことです。私は、このユーティリティはほぼすべてのLinuxの亜種に存在すると思いますが、デフォルトでは必ずしもインストールされているわけではありません。ユーティリティの出力を解析する必要がありますが、カーネルpsedofilesで直接作業するのは面倒です。

ディスクデバイスのリストを取得するには、udisksctl statusを実行します。これにより、モデル名が表示されます。モデル名には、「USB」という文字列とブロックデバイス(例:/ dev/sdb)が含まれます。その後、udisksctl info -b /dev/sdbを実行し、 "MountPoints"で始まる行を探します。デバイスがマウントできない場合は、udisksctl mount...を実行してデバイスを強制してください。 udisksctlができる他の有用な情報がたくさんあります。そのマニュアルページをご覧ください。

Runtime.exec()を使用してudisksctlを実行することはできますが、最初にインストールされていることを確認するのはおそらく/usr/bin/udisksctlです。

関連する問題