java 读取CD-ROM 光驱中文件

我编写了一个利用Java控制光驱的打开与关闭,并从光盘中拷贝文件到本地磁盘的一个工具类.
注意:此工具类只适合最基本的从CD\DVD上拷贝文件到本地,不适合其抓取音轨等复杂操作.
package com.multiable.Composite;

import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileSystemView;

/**
* A program to Open CD drive using VB script with the help of JAVA
* @author mark.wang
*
*/

public class CDUtils {
private CDUtils() {
}

// 利用VB script 打开光驱
public static void open(String drive) {
try {
File file = File.createTempFile("realhowto", ".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);

String vbs = "Set wmp = CreateObject(\"WMPlayer.OCX\") \n"
+ "Set cd = wmp.cdromCollection.getByDriveSpecifier(\""
+ drive + "\") \n cd.Eject";

fw.write(vbs);
fw.close();

Runtime.getRuntime().exec("wscript " + file.getPath()).waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}

// 利用VB script 关闭光驱
public static void close(String drive) {
try {
File file = File.createTempFile("realhowto", ".vbs");
file.deleteOnExit();
FileWriter fw = new FileWriter(file);

// to close a CD, we need eject two times!
String vbs = "Set wmp = CreateObject(\"WMPlayer.OCX\") \n"
+ "Set cd = wmp.cdromCollection.getByDriveSpecifier(\""
+ drive + "\") \n cd.Eject \n cd.Eject ";

fw.write(vbs);
fw.close();

Runtime.getRuntime().exec("wscript " + file.getPath()).waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}

// 获取所有光驱的盘符列表
public static ArrayList<File> findCDWin32() {
FileSystemView fsv = FileSystemView.getFileSystemView();

File[] roots = fsv.getRoots();
if (roots.length == 1) {
roots = roots[0].listFiles()[0].listFiles();
} else {
System.out.println("I guess you're not on Windows");
return null;
}

ArrayList<File> foundDrives = new ArrayList<File>();
for (int i = 0; i < roots.length; i++) {
if (fsv.isDrive(roots[i])) {
if (fsv.getSystemTypeDescription(roots[i]).indexOf("CD") != -1) {
foundDrives.add(roots[i]);
}
}
}

return foundDrives;
}

public static void main(String[] args) {

String cdDrive = "";

if(findCDWin32().size() > 0) {
File file = findCDWin32().toArray(new File[0])[0];
cdDrive = file.getPath();
} else {
return;
}

// open the cd-rom
JOptionPane.showConfirmDialog((java.awt.Component) null, "Press OK to open CD", "CDUtils",
javax.swing.JOptionPane.DEFAULT_OPTION);

CDUtils.open(cdDrive);
}

}
《疯狂Java讲义》 配书光盘 版权所有,侵权必究 2011年12月 _______________________________________________________________________ 一、光盘内容 本光盘是《疯狂Java讲义》一书的配书光盘,书的代码按章、按节存放, 即第3章第1节所使用的代码放在codes文件夹的03\3.1文件夹下,依此类推。 另:书每份源代码也给出与光盘源文件的对应关系,方便读者查找。 本光盘codes目录下有18个文件夹,其内容和含义说明如下: (1) 01~18文件夹名对应于《疯狂Java讲义》的章名, 即第3章所使用的代码放在codes文件夹的03件夹下,依此类推。 (2) 本书所有代码都是IDE工具无关的程序,读者既可以在命令行窗口直接编译、 运行这些代码,也可以导入Eclipse、NetBeans等IDE工具来运行它们。 (3) 本书第12章第11节的TestTableModel.java程序,以及第13章绝大部分程序 都需要连接数据库,所以读者需要先导入*.sql文件数据库脚本,并修改 mysql.ini文件数据库连接信息。连接数据库时所用的驱动程序JAR文件 为mysql-connector-java-3.1.10-bin.jar文件。这些需要连接数据库的程序 里还提供了一个*.cmd文件,该文件是一个批处理文件,运行该文件可以运行 相应的Java程序,例如DatabaseMetaDataTest.java对应的*.cmd文件为 runDatabaseMetaDataTest.cmd。 (4) 光盘根目录下提供了一个“Java设计模式(疯狂Java联盟版).chm”文件,这是一份 关于设计模式的电子教材,由疯狂Java联盟的杨恩雄亲自编写、制作,他同意广 大读者阅读、传播这份开源文档。 (5) 因为本书第1版有些读者提出关于《疯狂Java讲义》课后习题标准答案的问题, 因此本书光盘根目录下包含一个project_codes文件夹,该文件夹里包含了疯狂 Java联盟的杨恩雄编写的《疯狂Java实战演义》一书的光盘内容,该光盘包 含了大量实战性很强的项目,这些项目基本覆盖了《疯狂Java讲义》课后习题 的要求,读者可以参考相关案例来完成《疯狂Java讲义》的课后习题。 二、运行环境 本书的程序在以下环境调试通过: (1) 安装jdk-7-windows-i586.exe,安装完成后,添加CLASSPATH环境变量,该环境变量 的值为.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar。如果为了可以编译和 运行Java程序,还应该在PATH环境变量增加%JAVA_HOME%/bin。其JAVA_HOME代表 JDK(不是JRE)的安装路径。 如何安装上面工具,请参考本书的第1章。 (2) 安装MySQL 5.5或更高版本,安装MySQL时选择GBK编码方式(按第13章介绍的方式安装)。 三、注意事项 (1) 代码有大量代码需要连接数据库,读者应修改数据库URL以及用户名、密码, 让这些代码与读者运行环境一致。如果项目下有SQL脚本,则导入SQL脚本即可;如果 没有SQL脚本,系统将在运行时自动建表,读者只需创建对应的数据库即可。 (2) 在使用本光盘的程序时,请将程序拷贝到硬盘上,并去除文件的只读属性。 四、技术支持 如果您使用本光盘遇到不懂的技术问题,您可以登录如下网站与作者联系: http://www.crazyit.org
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值