2009-04-22 7 views
1

In meiner Scala (läuft auf Java-Anwendung) möchte ich eine Liste aller Laufwerke, die DVD-Medien, z. so etwas wie diese:Enumeration von angeschlossenen DVD-Laufwerken in Linux/Java/Scala

  • /dev/scd0 Star Trek DS9 DVD 1
  • /dev/scd0 Die 4400 DVD1

Nicht sicher, ob es möglich ist, den Namen des Disk zu bekommen, aber der Weg ist das Wichtigste für mich sowieso.

Ich würde eine reine Java/Scala-Lösung bevorzugen (mit file.io Zeug). Wenn das nicht möglich ist, ist auch der Zugriff auf die richtigen Linux-Dateien in Ordnung (wie/proc/something).

Vielen Dank im Voraus!

Antwort

1

Ich glaube, Sie mit java.io. kein Glück * aber wenn Sie nichts dagegen keine Anrufe, um Linux-Befehle zu machen, können Sie die Daten, die durch zusammenbauen:

  1. Calling „mount“ und Erfassen der ersten Spalte der Ausgabe.
  2. Calling „volname“ auf jeden Wert, den Sie in Schritt erfasst 1.

Nach der Manpage volname, es gibt nur Daten für die ISO-9660-Dateisysteme (zB DVDs), so Pfad jedes Gerät, das zurückgibt leer kann ignoriert werden.

0

Es gibt eine (ungetestete) Möglichkeit, Ihre Laufwerke mit reinem Java-Code zu bekommen. Zumindest unter Windows.

Es ist ein bisschen hacky und funktioniert nicht unter Linux (weil Linux nicht so viel Integration Liebe von Sonne ich glaube).

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

Das Filesystem cla bietet einige Funktionen wie die möglichen Wurzeln zu fragen, ob sie ein Antrieb (isDrive()) sind. Swing verwendet dies, um den Dateiwähler mit den richtigen Symbolen zu zu präsentieren, also sollte es unter Windows arbeiten, weil IIRC dort die korrekten Symbole zeigt. Unter Linux zeigt es leider nur den "/" root.

Einer der Gründe, warum dies unter Linux nicht funktioniert, könnte darin bestehen, dass die Linux-Entwickler ihre bevorzugte Art, solche Informationen dem Benutzerbereich zu präsentieren, ständig ändern. Im Moment ist es IIRC hal und dbus. Vielleicht wollte SUN nicht jedes Mal eine neue Java-Version veröffentlichen.

Wenn reines Java es nicht schneidet, könnten Sie vielleicht ein wenig jni (das nicht so schwer zu verwenden ist, wenn Sie Tools wie JNA oder ähnliches verwenden) verwenden, um direkt auf die Linux Apis zuzugreifen. Ich habe das nicht getan, aber könnte es versuchen, wenn Sie interessiert sind.