2011-12-19 17 views
8

私はLMCT(Let Me Copy That)というアプリケーションで作業していて、Javaでプログラムされています.JavaからDVD/CDに書き込む方法を知る必要があります。DVD/CDへの読み書き -

どのような例でも、APIまたはリンクを歓迎します。

+3

これはJavaの問題のようなものではありません。つまり、ハードウェアの各部分は、Java側でネイティブコードにつながるオペレーティングシステムとのインターフェイスが必要です。だから、Javaではできないわけではありませんが、仕事を完了させるためには別の言語のコードとインターフェースする必要があります。 – corsiKa

+0

私はこれを行うための最良の方法は、IMAPI(C++)を使用してJavaコードにリンクすることです。 –

+0

質問に再びフラグを立て、「ここに属しません」を選択して理由を選択してください。私はそれに応じてそれを閉じます。 – BoltClock

答えて

7

これは、COM4JIMAPIを使用して行っています(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}"); 
    } 
} 
+0

あなたの答えをありがとう。 * IMAIP.jar *と* COM4J.jar *はどのようにして見つけることができますか? Java用のjarファイルはありますか? –

+1

@omidnazifi COM4Jは[ここ](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

+0

COM4Jはクロスプラットフォームですか? ** Windows **だけで使用できますか? –

関連する問題