📄 cdrecordcontroller.java
字号:
/* * ScanBus.java * * Created on 26. oktober 2005, 15:04 * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */package burningtools; import java.lang.*;import java.io.*;import java.util.*;/** * * @author Thomas */public class CdRecordController { private static CdRecordController currentController = new CdRecordController(); private Vector<CDRecordListener> cdRecordListeners = new Vector<CDRecordListener>(); /** * METHOD - Making CdRecordController static */ public static CdRecordController getCdRecord() { return currentController; } /** * METHOD - Add a CDRecordListener to the object variabel vector */ public void addListener(CDRecordListener cdRecordListener) { this.cdRecordListeners.addElement(cdRecordListener); } public void fireBurnProcessUpdate(int burnPercentage, int burnTime, String burnMessage) { for(CDRecordListener l : cdRecordListeners) { l.burnProgressUpdated(burnPercentage, burnTime, burnMessage); } } /** * METHOD - Scanning machine for drivers, using scsibus (Windows) */ public Vector<Device> scanBus() { // TODO: Test for ATAPI-drive. Return atapi = true if drive is ATAPI boolean atapi = false; //ATAPI is always false on Windows return this.scanBus(atapi); } // METHOD - Scanning machine for drivers, using atapi public Vector<Device> scanBus(boolean atapi) { Vector<Device> deviceVector = new Vector<Device>(); ArrayList<String> scsiDevice = new ArrayList<String>(); try{ String addString = ""; if (atapi == true) { addString = "dev=ATAPI "; } String launchString = "cdrecord " + addString + "-scanbus"; //System.out.println(launchString); Process scanBusProcess = Runtime.getRuntime().exec(launchString); InputStream scanBusStream = scanBusProcess.getInputStream(); InputStreamReader scanBusStreamReader = new InputStreamReader(scanBusStream); BufferedReader scanBusBuffer = new BufferedReader(scanBusStreamReader); String bufferLine = scanBusBuffer.readLine(); while (bufferLine != null) { if ((bufferLine.startsWith("\t")) && !((bufferLine.contains("*")) || (bufferLine.contains("HOST ADAPTOR")))){ scsiDevice.add(bufferLine.substring(1, 6)); } bufferLine = scanBusBuffer.readLine(); } scanBusProcess.destroy(); } catch(Exception e){ System.out.println("Something went wrong!"); e.printStackTrace(); } if (scsiDevice.isEmpty()) { System.out.println("No device was found!"); } else { int numberOfDevices = scsiDevice.size(); for (int i=0; i<numberOfDevices; i++) { String dev = scsiDevice.get(i); String[] devProberties = dev.split(","); int scsibus = Integer.parseInt(devProberties[0]); int target = Integer.parseInt(devProberties[1]); int lun = Integer.parseInt(devProberties[2]); System.out.println("ScsiBus: " + scsibus + " Target: " + target + " Lun: " + lun); deviceVector.addElement(new Device(scsibus, target, lun, atapi)); } } return deviceVector; } /** * METHOD - Find out if there is a blank medium loadet in the chosen drive */ public Medium getMedium(Device device) { boolean atapi = device.getAtapi(); int scsibus = device.getScsibus(); int target = device.getTarget(); int lun = device.getLun(); boolean mediumLoadet = true; boolean mediumBlank = true; try{ String addString = ""; if (atapi == true) { addString = "ATAPI:"; } String shellCommand = "cdrecord dev=" + addString + scsibus + "," + target + "," + lun + " -toc"; Process cdrecordProcess = Runtime.getRuntime().exec(shellCommand); // Get inputstream InputStream cdrecordStream = cdrecordProcess.getInputStream(); InputStreamReader cdrecordStreamReader = new InputStreamReader(cdrecordStream); BufferedReader cdrecordBuffer = new BufferedReader(cdrecordStreamReader); // Reading ErrorStream InputStream errorStream = cdrecordProcess.getErrorStream(); InputStreamReader errorStreamReader = new InputStreamReader(errorStream); BufferedReader errorBuffer = new BufferedReader(errorStreamReader); String bufferLine = ""; while (bufferLine != null) { if(bufferLine.startsWith("first")) { mediumBlank = false; } if(bufferLine.endsWith("Try to load media by hand.")) { mediumLoadet = false; } if (errorBuffer.ready()) { bufferLine = errorBuffer.readLine(); System.out.println("ERROR: " + bufferLine); } else { bufferLine = cdrecordBuffer.readLine(); System.out.println(bufferLine); } } // Destroying process cdrecordProcess.destroy(); } catch(Exception e){ System.out.println("Something went wrong!"); e.printStackTrace(); } if (mediumLoadet) { Medium medium = new Medium(mediumBlank); getMediumInfo(device, medium); return medium; } else { return null; } } /** * METHOD - Find out information of loadet medium */ private void getMediumInfo(Device device, Medium medium) { boolean atapi = device.getAtapi(); int scsibus = device.getScsibus(); int target = device.getTarget(); int lun = device.getLun(); boolean mediumIsCD = false; boolean mediumIsDVD = false; int mediumCapasity = 0; try{ String addString = ""; if (atapi == true) { addString = "ATAPI:"; } String shellCommand = "cdrecord dev=" + addString + scsibus + "," + target + "," + lun + " -atip"; Process cdrecordProcess = Runtime.getRuntime().exec(shellCommand); // Get inputstream InputStream cdrecordStream = cdrecordProcess.getInputStream(); InputStreamReader cdrecordStreamReader = new InputStreamReader(cdrecordStream); BufferedReader cdrecordBuffer = new BufferedReader(cdrecordStreamReader); // Reading ErrorStream InputStream errorStream = cdrecordProcess.getErrorStream(); InputStreamReader errorStreamReader = new InputStreamReader(errorStream); BufferedReader errorBuffer = new BufferedReader(errorStreamReader); String bufferLine = cdrecordBuffer.readLine(); while (bufferLine != null) { if(bufferLine.contains("ATIP start of lead out:")) { mediumIsCD = true; String[] temp = bufferLine.split(":"); String larstPart = temp[1].trim(); String[] kim = larstPart.split(" "); String mediumCapasityStr = kim[0]; String mediumCapasityStrTrim = mediumCapasityStr.trim(); int mediumClusters = Integer.valueOf(mediumCapasityStrTrim); mediumCapasity = (int)((double)mediumClusters/512.0); } bufferLine = cdrecordBuffer.readLine(); } String errorLine = errorBuffer.readLine(); while (errorLine != null) { if(errorLine.contains("Found DVD media")) { mediumIsDVD = true; mediumCapasity = 4490; } errorLine = errorBuffer.readLine(); } // Destroying process
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -