J2SE编译.java文件并获取编译进度

J2SE编译.java文件并获取编译进度

一直在想一个和eclipse相仿的编译.java文件相似的方法,查看了api后,写出了以下代码。

源文件放在D://Test//cmdJavaTest//src下,所要编译的类为j2me.shell.*,编译后存放在tempclass文件夹下。

由于Runtime.exec(String cmdStr,String[]envp,File file)中envp并不支持迭代收,所以EXTRAAPI也只好使用全称将所以包的完整路径都表示出来了。

 

编译进度记录在了log.txt中。

 

代码如下:

 

public static void exec_javac() { // String str = "cmd /c dir"; String str = "cmd /c %JAVAC% -verbose -g:none -source 1.3 -target 1.3 -bootclasspath %CLDCAPI%;%MIDPAPI%;%EXTRAAPI%;. -classpath %CLDCAPI%;%MIDPAPI%;%EXTRAAPI%;%DESTINATION% -d .//%DESTINATION% %JAVA_FILES%"; String[] envp = { "JAVAC=E://Java//jdk1.6.0_14//bin//javac.exe", "J2MEBOOT=D://MissionSetup//SunWTK2_5_2", "CLDCAPI=D://MissionSetup//SunWTK2_5_2//lib//cldcapi11.jar", "MIDPAPI=D://MissionSetup//SunWTK2_5_2//lib//midpapi20.jar", "EXTRAAPI=D://MissionSetup//SunWTK2_5_2//lib//jsr75.jar;" + "D://MissionSetup//SunWTK2_5_2//lib//jsr082.jar;" + "D://MissionSetup//SunWTK2_5_2//lib//mmapi.jar;" + "D://MissionSetup//SunWTK2_5_2//lib//wma20.jar;", "DESTINATION=tempclass", "JAVA_FILES=src//j2me//shell//*.java" }; try { File file = new File("D://Test//cmdJavaTest"); File logFile = new File("res//log.txt"); if (logFile.exists()) { logFile.delete(); } logFile.createNewFile(); OutputStream os = new FileOutputStream(logFile); Process process = Runtime.getRuntime().exec(str, envp, file); InputStream is = process.getInputStream(); int read = -1; byte[] data = new byte[128]; InputStream errorIs = process.getErrorStream(); System.out.println("open errorStream"); while ((read = errorIs.read(data)) != -1) { os.write(data, 0, read); System.out.println("read = " + read); } System.out.println("ErrorStream Done!!!"); System.out.println("open inputStream"); while ((read = is.read(data)) != -1) { System.out.println("read = " + read); os.write(data, 0, read); } System.out.println("InputStream Done!!!"); os.close(); is.close(); process.destroy(); } catch (IOException e) { e.printStackTrace(); } }

你可能感兴趣的:(java,eclipse,String,File,J2SE,byte)