(Me That Copy Let) ve Java programlanmıştır, sadece java bir DVD/CD'ye nasıl bilmek gerekir .Okuma ve Yazma - Java
herhangi örneği, API veya bağlantı açığız.
(Me That Copy Let) ve Java programlanmıştır, sadece java bir DVD/CD'ye nasıl bilmek gerekir .Okuma ve Yazma - Java
herhangi örneği, API veya bağlantı açığız.
Bunu kullanarak COM4J ve IMAPI (yalnızca Windows üzerinde çalışıyor) yaptık.
Bu örnek kod sisteminde ilk CD kayıt cihazı kullanarak bir ISO dosyası yakar:
File isoFile = new File("myimage.iso");
IDiscMaster2 dm = ClassFactory.createMsftDiscMaster2();
int count = dm.count();
//Pick the first recorder on the system
String recorderUniqueId = null;
for (int i = 0; i < count; i++)
{
String cur = dm.item(i);
recorderUniqueId = cur;
}
IDiscRecorder2 recorder = ClassFactory.createMsftDiscRecorder2();
recorder.initializeDiscRecorder(recorderUniqueId);
System.out.println("Using recorder: " + recorder.vendorId() + " " + recorder.productId());
IIsoImageManager imageManager = StreamClassFactory.createMsftIsoImageManager();
imageManager.setPath(isoFile.getAbsolutePath());
imageManager.validate();
System.out.println("ISO Validation successful: " + isoFile.getAbsolutePath());
IDiscFormat2DataExt discData = ClassFactoryExt.createMsftDiscFormat2Data();
discData.recorder(recorder);
discData.clientName(IsoMan.class.getSimpleName());
int mediaStatus = discData.currentMediaStatusExt();
System.out.println("Media status: " + mediaStatus);
if ((mediaStatus & IMAPI_FORMAT2_DATA_MEDIA_STATE.IMAPI_FORMAT2_DATA_MEDIA_STATE_WRITE_PROTECTED.comEnumValue()) != 0)
throw new RuntimeException("Media is write protected/not empty.");
//Check if disc is empty
int addr = discData.nextWritableAddress();
if (addr != 0)
throw new RuntimeException("Disc is not empty, not writing.");
IStream isoStream = imageManager.stream();
System.out.println("Writing CD");
discData.write(isoStream);
System.out.println("Finished writing");
Ben COM4J sınıfları oluşturulan takviye gerekiyordu biraz jeneratör mükemmel iş yapmadım çünkü:
/**
* Defines methods to create COM objects
*/
public abstract class ClassFactoryExt {
private ClassFactoryExt() {} // instanciation is not allowed
/**
* Microsoft IMAPIv2 Data Writer
*/
public static com.ms.imapi2.IDiscFormat2DataExt createMsftDiscFormat2Data() {
return COM4J.createInstance(com.ms.imapi2.IDiscFormat2DataExt.class, "{2735412A-7F64-5B0F-8F00-5D77AFBE261E}");
}
}
/**
* Data Writer
*/
@IID("{27354153-9F64-5B0F-8F00-5D77AFBE261E}")
public interface IDiscFormat2DataExt extends com.ms.imapi2.IDiscFormat2Data {
/**
* The state (usability) of the current media
*/
@VTID(18)
//com.ms.imapi2.IMAPI_FORMAT2_DATA_MEDIA_STATE currentMediaStatus();
int currentMediaStatusExt();
}
/**
* Defines methods to create COM objects
*/
public abstract class StreamClassFactory {
private StreamClassFactory() {} // instanciation is not allowed
/**
* Boot options
*/
public static com.ms.imapi2.IBootOptions createBootOptions() {
return COM4J.createInstance(com.ms.imapi2.IBootOptions.class, "{2C941FCE-975B-59BE-A960-9A2A262853A5}");
}
/**
* File system image
*/
public static com.ms.imapi2.IFileSystemImage3 createMsftFileSystemImage() {
return COM4J.createInstance(com.ms.imapi2.IFileSystemImage3.class, "{2C941FC5-975B-59BE-A960-9A2A262853A5}");
}
/**
* Microsoft IMAPIv2 Iso Image Manager
*/
public static com.ms.imapi2.IIsoImageManager createMsftIsoImageManager() {
return COM4J.createInstance(com.ms.imapi2.IIsoImageManager.class, "{CEEE3B62-8F56-4056-869B-EF16917E3EFC}");
}
}
Cevabınız için teşekkürler. Nasıl IMAIP.jar * ve * COM4J.jar * 'ı bulabilirim? Java için kavanoz dosyaları var mı? –
@omidnazifi COM4J indirilebilir [burada] (http://com4j.kohsuke.org/). IMAPI sınıfları COM4J tarafından '{2C941FD0-975B-59BE-A960-9A2A262853A5}' libId kullanılarak oluşturulmuştur. [Tlbimp Ant görevi] (http://com4j.kohsuke.org/ant.html) veya [com4j Maven eklentisi] (http://com4j.java.net/maven-com4j-plugin/) kod üretimi yapabilir . – prunge
COM4J çapraz bir platform mu? ya da sadece ** içinde kullanın ** **? –
Düşüncesizce, bu gerçekten bir Java sorun gibi görünmüyor. Yani, donanımın her bir parçası işletim sistemi ile arayüz yapmalı ve Java tarafında yerel koda yol açacaktır. Bu yüzden o Java ile yapılabilir olamayacağını değil, ama büyük olasılıkla işin yapılması için başka dilin kodu ile arayüz gerekir. – corsiKa
Bunu yapmanın en iyi yolunun IMAPI (C++) kullanıp benim Java koduma –
bağlantısını yapması gerekiyor. Lütfen sorunuzu tekrar işaretleyin, "buraya ait değil" i seçin ve nedenini seçin. Ben de buna göre kapatırım. – BoltClock