views:

620

answers:

4

Does anyone know of a way to issue commands to a hard drive within Java? Does Java even support this kind of hardware interaction?

For example, if I have a SCSI hard drive that I would like to inquiry, is there a pre-existing Java method to do this, or would I have to write my own?

http://en.wikipedia.org/wiki/SCSI has some general information on SCSI commands in case you aren't familiar.

+4  A: 

Java doesn't support talking directly to hardware like that. However, you can use JNI to call a C/C++ function from Java that can.

dj_segfault
Can I use other languages with JNI to access the hard drive, or is it limited to C/C++?Alternatively, would it be possible to write a program entirely in C/C++ that is called/run by a Java program?
Blue
Yes and Yes. I've heard you can use aseambly directly, and yes, you can run a complete program from Java.
OscarRyz
+1  A: 

No, since Java runs in a "virtual" machine rather than a real one. But it could be used as a bridge as dj mentioned earlier using JNI.

According to Wikipedia JNI can also call assembly directly. JNI could be used to call complete programs written in C or C++

OscarRyz
If the C/C++ code is a complete program, there's no reason to use JNI; you can just execute the program. JNI is non-trivial to implement, so I wouldn't use it unless I needed to.JNI is used to call *functions* in other languages. I used it at Polaroid to talk to a credit card reader.
dj_segfault
+1  A: 

Three words "JNI or JNA". I strongly recommend taking a look at the latter to see if it suits your situation, instead of just opting for JNI.

Software Monkey
A: 

you need to write the HDD interface code in C/C++ and then call that from Java using JNI

JRomio