나는 LMCT (Let Me Copy That)라는 응용 프로그램에서 일하고 있는데 Java로 프로그래밍되었으므로 Java에서 DVD/CD로 구울 수있는 방법을 알아야합니다. .DVD/CD에 읽기 및 쓰기 -
모든 예제, API 또는 링크를 환영합니다.
나는 LMCT (Let Me Copy That)라는 응용 프로그램에서 일하고 있는데 Java로 프로그래밍되었으므로 Java에서 DVD/CD로 구울 수있는 방법을 알아야합니다. .DVD/CD에 읽기 및 쓰기 -
모든 예제, API 또는 링크를 환영합니다.
나는이 작업을 COM4J과 IMAPI을 사용하여 수행했습니다 (Windows에서만 작동).
이 샘플 코드는 시스템의 첫 번째 CD의 녹음 장치를 사용하여 ISO 파일을 화상 :
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");
나는 COM4J 클래스를 생성 보완했다 조금 발전기가 완벽하게 일을하지 않았기 때문에 :
/**
* 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}");
}
}
답장을 보내 주십시오. * IMAIP.jar * 및 * COM4J.jar *는 어떻게 찾을 수 있습니까? Java 용 jar 파일이 있습니까? –
@omidnazifi COM4J는 [here] (http://com4j.kohsuke.org/)에서 다운로드 할 수 있습니다. IMAPI 클래스는 {2C941FD0-975B-59BE-A960-9A2A262853A5}의 libId를 사용하여 COM4J에 의해 생성되었습니다. [tlbimp Ant 태스크] (http://com4j.kohsuke.org/ant.html) 또는 [com4j Maven 플러그인] (http://com4j.java.net/maven-com4j-plugin/)은 코드 생성을 수행 할 수 있습니다 . – prunge
COM4J는 크로스 플랫폼입니까? 아니면 그냥 ** Windows **에서 사용합니까? –
실제로이 문제는 Java 문제와 같지 않습니다. 내 말은, 하드웨어의 각 부분은 운영 체제와 인터페이스해야하며, Java 쪽에서는 원시 코드로 연결됩니다. 따라서 Java로는 할 수 없다는 것이 아니라 다른 언어의 코드와 인터페이스하여 작업을 완료해야 할 가능성이 높습니다. – corsiKa
내 가장 좋은 방법은 IMAPI (C++)를 사용하여 Java 코드에 연결하는 것입니다. –
질문에 다시 플래그를 지정하고 "여기에 속하지 않습니다"를 선택하고 이유를 선택하십시오. 나는 그것을 적절하게 닫을 것이다. – BoltClock