2009-04-22 7 views
1

내 스칼라 (Java에서 실행) 응용 프로그램에서 DVD 미디어가 포함 된 모든 드라이브 목록을 얻고 싶습니다. 이 같은 :Linux/Java/Scala에서 연결된 DVD 드라이브 열거

  • 는/dev/scd0이라고하고, 스타 트렉 DS9 DVD1
  • 는/dev/scd0이라고하고, 4400 DVD1

는 디스크의 이름을 얻을 수 있는지 확인하지만,하지의 경로 어쨌든 나를 위해 중요한 것입니다.

순수한 Java/Scala 솔루션을 선호합니다 (file.io 항목 사용). 그렇게 할 수 없다면 올바른 Linux 파일에 액세스하는 것이 좋습니다 (예 :/proc/something).

미리 감사드립니다.

답변

1

나는 * 당신은 java.io 패키지 운이 있다고 생각하지만 당신은 리눅스 명령을 밖으로 전화를 걸 괜찮다면, 당신은에 의해 데이터를 조립할 수 :

  1. 는 "마운트"호출 및 출력의 첫 번째 열을 캡처합니다.
  2. 각각의 값에 "대해 volname"를 호출
  3. 당신이 대해 volname에 대한 man 페이지에 따르면 1 단계

에서 캡처, 그것은 단지 반환 ISO-9660 파일 시스템에 대한 데이터 (예를 들어 DVD를), 그래서 모든 장치 경로를 반환 empty는 무시할 수 있습니다.

0

순수 Java 코드로 드라이브를 가져올 수있는 (테스트되지 않은) 가능성이 있습니다. 적어도 Windows에서.

조금씩 해키하고 리눅스에서 작동하지 않습니다. (리눅스는 내가 믿는 태양으로부터 많은 통합 사랑을 얻지 못하기 때문에). 그들은 에 드라이브 경우

import javax.swing._ 
import javax.swing.filechooser._ 
val chooser = new JFileChooser() 
val view = chooser.getFileSystemView() 

FileSystemView가 제공자 라이선스 계약은 가능한 뿌리를 요구하는 등의 몇 가지 기능을 제공합니다 (isDrive()). Swing은 오른쪽 아이콘이있는 파일 선택자를 에 표시하기 위해 사용합니다. 따라서 IIRC는 올바른 기호를 표시하기 때문에 창에서 작동해야합니다. 리눅스에서는 불행히도 "/"루트 만 보여줍니다.

리눅스에서 작동하지 않는 이유 중 하나는 리눅스 개발자가 그러한 정보를 사용자 공간에 표시하는 선호하는 방식을 지속적으로 변경한다는 것입니다. 현재 IIRC hal과 dbus입니다. 어쩌면 SUN은이 변경 될 때마다 새로운 자바 버전을 공개하기를 원하지 않았습니다.

순수한 자바를 자르지 않으면 리눅스 API에 직접 액세스하기 위해 jni 등의 도구를 사용하는 경우 더 이상 사용하지 않는 jni를 사용할 수 있습니다. 나는 그렇게하지 않았지만 관심이 있다면 시도 할 수 있습니다.