나는 usb 장치에 저장된 파일을 내 데이터베이스로 가져 오는 방법을 연구 중이다. Mac 및 Windows 용으로 이미 만들었지 만, Linux/Ubuntu에서 Java와 함께 응용 프로그램을 사용할 때 usb 장치에 대한 경로를 얻는 방법을 모르겠습니다. 경로를 찾는 방법이 있습니까?리눅스와 우분투에서 usb 장치의 absolutePath를 얻는 방법
답변
모든 Linux 시스템에서 작동하는 것을 보장 할 방법이 없다고 생각합니다. 다양한 성공 정도와 함께 내가 사용한 몇 가지 접근 방식이 있습니다.
외부 유틸리티를 필요로하지 않는 방법을 열거하고 /dev/disk
, /proc/mounts
및 /sys/bus/usb
에 의사 파일을 구문 분석 및 스토리지를 보유하고있는 USB 장치의 표현을 구축하는 것입니다. 하나 이상의 추측이있을 수 있으므로 추측을해야하거나 사용자에게 선택권을 제공해야 할 수도 있습니다. 이것은 꽤 지루한 방법이지만, 그것이 가장 일반적인 것이라고 생각합니다. 다른 사람이 제안한대로 /media
, /run/media
을 볼 수는 있지만 일부 Linux 설치에서만 작동하며 해당 형식의 자동 마운트가 사용 가능한 경우에만 작동합니다.
덜 지루한 접근 방식은 프로그램에서 유틸리티 udisksctl
을 호출하는 것입니다. 필자는이 유틸리티가 거의 모든 리눅스 버전에 존재한다고 생각하지만 기본적으로 설치되지는 않습니다. 유틸리티의 출력은 파싱되어야하지만 커널 psedofiles로 직접 작업하는 것이 덜 귀찮습니다.
디스크 장치 목록을 얻으려면 udisksctl status
을 실행하십시오. 이렇게하면 모델 이름을 알 수 있습니다. 모델 이름에는 종종 텍스트 "USB"와 블록 장치 (예 :/dev/sdb)가 포함됩니다. 그런 다음 udisksctl info -b /dev/sdb
을 실행하고 "MountPoints"를 시작하는 행을 찾으십시오. 장치가 마운트되지 않았 으면, 원할 경우, udisksctl mount...
을 실행하여 강제로 장치를 마운트하십시오. udisksctl이 할 수있는 다른 유용한 것들이 있습니다 - 매뉴얼 페이지를보십시오.
자바에서는 udisksctl
을 실행하는 데 Runtime.exec()
을 사용할 수 있지만 /usr/bin/udisksctl
의 존재를 확인함으로써, 먼저 설치되어 있는지 확인하기 위해 사용자에게 아마 우호적이다.
경로를 따르십시오./media/... –
Fedora 시스템은 적어도 더 이상'/ media'에 자동 마운트하지 않습니다. 모든 Linux 시스템이 동일한 방식으로 이동식 미디어를 취급한다고 가정하는 것은 문제가됩니다. 불행히도, 그들은하지 않습니다. –