java 读取CD-ROM 光驱中文件

本文介绍了一个使用Java实现的工具类,用于控制光驱的开启与关闭,并从光盘上复制文件到本地磁盘。包括光驱的打开与关闭方法,以及如何获取光驱的盘符列表。
我编写了一个利用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);
}

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值