# Java USB



## No-Fear (14. März 2011)

Hallo,

ich muss ein programm in Java schreiben, das, wenn ein USB-Stick eingesteckt wird, den Stick automatisch erkennt und eine Datei drauf kopiert. Ist das möglich?

Ich habe was zu Java USB Api gefunden, komme damit aber nicht klar. Kennt jemand ein gutes Tutorial?


----------



## genodeftest (14. März 2011)

Eine USB API wird dir nicht viel helfen. Außerdem kenne ich leider kein gutes Tutorial, obwohl ich sehr lange danach gesucht habe. Für Java gibt es auch nur eine frei verfügbare USB-API, nämlich die Java Bindings von libusb: http://sourceforge.net/projects/libusbjava/
Dazu musst du dich allerdings grundlegend in das Thema USB einlesen, besonders in die libusb API http://libusb.sourceforge.net/api-1.0/index.html

Eine einfachere Möglichkeit, die dir mehr helfen sollte: Java 7 (noch nicht offiziell erschienen, nur als Beta-Version) kann Änderungen am Dateisystem erkennen und die Anwendung automatisch dafür benachrichtigen. 
Hier steht ein bisschen was: http://java.sun.com/developer/technicalArticles/javase/nio/
http://openjdk.org/projects/nio/
und hier ein ausführlicheres Tutorial:
http://download.oracle.com/javase/tutorial/essential/io/fileio.html
wichtig ist für dich vor allem http://download.oracle.com/javase/tutorial/essential/io/notification.html#overview


----------



## Thomas Darimont (22. März 2011)

Hallo,

eine einfache Möglichkeit (für Windows) wäre beispielsweise per WMI (mit ProcessBuilder per wmic oder per VB Script) die Systemkonfiguration zu pollen... und den ProcessOutput zu parsen.
Ich weiß, dass klingt hässlich funktioniert aber sehr zuverlässig ;-)

Hier der Beispielhafte VB Code:

```
strComputer = "."
Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set wmiEvent = wmi.ExecNotificationQuery("select * from __InstanceOperationEvent within 1 where TargetInstance ISA 'Win32_PnPEntity'")
While True
	Set usb = wmiEvent.NextEvent()
	Select Case usb.Path_.Class
		Case "__InstanceCreationEvent" WScript.Echo("USB device found" & usb.Path_)
		Case "__InstanceDeletionEvent" WScript.Echo("USB device removed")
		Case "__InstanceModificationEvent" WScript.Echo("USB device modified")
	End Select
Wend
```
Quelle:
http://ezinearticles.com/?USB-Detection-Using-WMI-Script&id=2502698

Natürlich lassen sich dort auch noch weitere Informationen abgreifen... etwa USB Stick / Platte Laufwerksbuchstabe etc.

Ausführen:
cscript usb_drives.vbs

Ausgabe:

```
C:\>cscript usb_drives.vbs
Microsoft (R) Windows Script Host, Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.

USB device modified
USB device modified
USB device removed
USB device removed
USB device removed
USB device found
USB device found
USB device found
```

Gruß Tom


----------

