Estoy tratando de encontrar una manera de detectar cuando una unidad flash ha sido conectada a mi computadora. Hasta el momento, la solución que encontré fue sondear FileSystem#getFileStores
por cambios. Esto realmente me dice cuándo se ha insertado la unidad flash, pero hasta donde sé, no hay forma de recuperar la ubicación. FileStore#type
y FileStore#name
ambos parecen muy poco confiables ya que su valor de retorno es específico de la implementación, pero parecen ser los únicos métodos que pueden devolver información relevante que pueda ayudar a encontrar el directorio para el FileStore
.Busque el directorio de un FileStore
Con esto en mente, el siguiente código:
public class Test {
public static void main(String[] args) throws IOException {
for (FileStore store : FileSystems.getDefault().getFileStores()) {
System.out.println(store);
System.out.println("\t" + store.name());
System.out.println("\t" + store.type());
System.out.println();
}
}
}
me dio este resultado:
/ (/dev/sda5)
/dev/sda5
ext4
/* snip */
/media/TI103426W0D (/dev/sda2)
/dev/sda2
fuseblk
/media/flashdrive (/dev/sdb1)
/dev/sdb1
vfat
Como resultado, FileStore#type
devuelve el formato de la unidad y FileStore#name
devuelve la ubicación del el archivo de dispositivo para la unidad. Por lo que puedo decir, el único método que tiene la ubicación de la unidad es el método toString
, pero extraer el nombre de la ruta parece peligroso porque no estoy seguro de qué tan bien esa solución en particular se mantendría en otros sistemas operativos y versiones futuras de Java.
¿Hay algo que me falta aquí o simplemente no es posible simplemente con Java?
información del sistema:
$ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu2)
OpenJDK Client VM (build 22.0-b10, mixed mode, sharing)
$ uname -a
Linux jeffrey-pc 3.2.0-24-generic-pae #37-Ubuntu SMP Wed Apr 25 10:47:59 UTC 2012 i686 athlon i386 GNU/Linux
¿Esto realmente funciona para Windows? Parece que extrañaría un disco que monté en C: \ Data. Todo el punto que estoy usando esta nueva API es que prometió encontrarme todos los puntos de montaje y no solo las raíces. – Trejkaz
Además, ¿/ media? ¿No quieres decir/mnt? – Trejkaz
@Trejkaz No sabía que pudieras hacer eso. Funciona para el caso estándar donde las unidades se montan como letras. Al menos en Ubuntu, las cosas están montadas por defecto en/media. También puede usar/etc/mtab para un trabajo más flexible en los sistemas Linux (realmente no uso tanto Windows, así que no sé de otro). – Jeffrey