小编典典

我已经使用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}" );

}

}

2020-10-12

java imapi_读写DVD / CD-Java相关推荐

  1. Linux java集成安装环境,Linux下Java环境安装

    本节主要讲解Linux(Centos 6.5)下Java环境的安装 1. 卸载机器上默认安装的JDK 在Linux环境下一般会默认安装jdk,为了自己项目的开发部署,一般情况要重新装jdk,而且自己装 ...

  2. centos7 java 配置_centos7下安装java及环境变量配置技巧

    现在我们常见的一些关于Linux的系统很多,但是使用的更多的一般都是CentOS和Ubuntu,今天我就来记录一下关于centos下java的安装和环境变量的配置,感兴趣的朋友跟随IIS7站长之家小编 ...

  3. JAVA之迷你DVD管理器

    1.JAVA之迷你DVD管理器. 1>打开记事本,写如下一段代码: import java.text.ParseException; import java.text.SimpleDateFor ...

  4. java如何读写json文件

    java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是 ...

  5. c++解析csv 存入数组_使用Apache Commons CSV在Java中读写CSV

    介绍 这是专门针对Java读写CSV的库的简短系列文章的第二篇,也是上一篇文章" Core Java读写CSV"的直接续篇. Apache Commons CSV 在Apache的 ...

  6. java怎样读txt文件_【后端开辟】java怎样读写txt文件?

    java怎样读取txt文件? 1.运用FileInputStream完成读取txt文件内容 2.运用FileOutputStream完成写入txt文件内容 package cn.xiaobing.ut ...

  7. java 顺序 读写 Properties 配置文件 支持中文 不乱码

    java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...

  8. 编写线程安全的Java缓存读写机制 (原创)

    一种习以为常的缓存写法: IF value in cached THENreturn value from cache ELSEcompute valuesave value in cacheretu ...

  9. 写缓存java,编写线程安全的Java缓存读写机制 (原创)

    一种习以为常的缓存写法: IF value in cached THEN return value from cache ELSE compute value save value in cache ...

最新文章

  1. PowerDesigner生成数据库
  2. 如何实现立体的DataGrid和具有Windows效果的图片按钮
  3. 会员管理scrm系统精细化运营更好促进成交
  4. GAN完整理论推导与实现,Perfect!
  5. 如何看待亚马逊 AI 李沐团队大批人员离职?
  6. 形状变化html,图形变换的三种方式是什么?
  7. android 默认打开服务器地址,Android开发实现任意切换服务器地址
  8. java 异常处理发生异常_处理Java中的异常
  9. 11个实用jQuery日历插件
  10. 关于Delphi XE2的FMX的一点点研究之消息篇
  11. 最大连续子数组和 动态规划_53. 最大子序和(动态规划)
  12. 频段、信道带宽、EARFCN、频段和EARFCN之间的换算
  13. 使用python爬取文库文档
  14. 优化器TORCH.OPTIM
  15. python爬虫实践-腾讯视频弹幕分析
  16. 路由器显示DNS服务器异常,路由器dns异常怎么办
  17. Python初学笔记1-【循环语句】
  18. 用 8550 和 ULN2003 驱动小型直流电机正反转
  19. 向量法计算多边形面积
  20. Odoo tree视图使用js添加按钮(以及跳转页面)

热门文章

  1. MongoDB 安装与启动
  2. 2011年8月5日星期五
  3. FCKeditor 配置、扩展
  4. does not esixt in the current content error
  5. Markdown 调整图片位置与大小
  6. 面试官,你为什么老是问我”闭包“
  7. 使用IDEA逆向生成实体类时注意问题(Maven)
  8. spring-mvc.xml与spring-mybatis.xml配置文件中命名空间问题
  9. 了解java虚拟机mdash;非堆相关参数设置(4)
  10. Python空间数据处理环境搭