如题
写一段代码
通过web形式提交到服务器上
要求生成编译好的文件public class Test { /**
*
*/
public Test() {
// TODO Auto-generated constructor stub
} /**
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {System.out.println(i);}
}
}
/**编译JavaCode,返回临时文件对象*/
private synchronized static File compiles(String name,String code)throws IOException,Exception{
File file;
//在用户当前文件目录创建一个临时代码文件
file=File.createTempFile(name,".java",new File(System.getProperty("user.dir")));
//当虚拟机退出时,删除此临时java源文件
file.deleteOnExit();
//获得文件名和类名字
String filename=file.getName();
String classname=getClassName(filename);
// System.out.println(classname);
//将代码输出到文件
PrintWriter out=new PrintWriter(new FileOutputStream(file));
out.write(code);
//关闭文件流
out.flush();
out.close();
//编译代码文件
String[] args=new String[]{"-d",System.getProperty("user.dir"),filename};
// System.out.println(System.getProperty("user.dir"));
//返回编译的状态代码
int status=javac.compile(args);
//处理编译状态
System.out.println(status);
return file;
}我这样实现
有一些问题,生成的文件是Test****.java
怎么才能生成Test.java的文件??
写一段代码
通过web形式提交到服务器上
要求生成编译好的文件public class Test { /**
*
*/
public Test() {
// TODO Auto-generated constructor stub
} /**
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {System.out.println(i);}
}
}
/**编译JavaCode,返回临时文件对象*/
private synchronized static File compiles(String name,String code)throws IOException,Exception{
File file;
//在用户当前文件目录创建一个临时代码文件
file=File.createTempFile(name,".java",new File(System.getProperty("user.dir")));
//当虚拟机退出时,删除此临时java源文件
file.deleteOnExit();
//获得文件名和类名字
String filename=file.getName();
String classname=getClassName(filename);
// System.out.println(classname);
//将代码输出到文件
PrintWriter out=new PrintWriter(new FileOutputStream(file));
out.write(code);
//关闭文件流
out.flush();
out.close();
//编译代码文件
String[] args=new String[]{"-d",System.getProperty("user.dir"),filename};
// System.out.println(System.getProperty("user.dir"));
//返回编译的状态代码
int status=javac.compile(args);
//处理编译状态
System.out.println(status);
return file;
}我这样实现
有一些问题,生成的文件是Test****.java
怎么才能生成Test.java的文件??
private static com.sun.tools.javac.Main javac=new com.sun.tools.javac.Main();使用了tools.jar包
java的动态编译
这个在调用这个方法的时候就传进来了
关键是我要生成的文件名是Test.java
不能是Test***.java
private synchronized static File compiles(String code)throws IOException,Exception{
File file;
//在用户当前文件目录创建一个临时代码文件
file=File.createTempFile("Test",".java",new File(System.getProperty("user.dir")));
//当虚拟机退出时,删除此临时java源文件
file.deleteOnExit();
//获得文件名和类名字
String filename=file.getName();
String classname=getClassName(filename);
// System.out.println(classname);
//将代码输出到文件
PrintWriter out=new PrintWriter(new FileOutputStream(file));
out.write(code);
//关闭文件流
out.flush();
out.close();
//编译代码文件
String[] args=new String[]{"-d",System.getProperty("user.dir"),filename};
// System.out.println(System.getProperty("user.dir"));
//返回编译的状态代码
int status=javac.compile(args);
//处理编译状态
System.out.println(status);
return file;
}我这样传生成的文件依然是Test***.java
怎么才能让它生成的是Test.java
高手帮忙
谢了
说下思路
提交的时候截取类名 name1
提取生成的文件名 name2
用name2替换掉name1
ok,搞定为什么要这样操作,首先
如果类名相同的class文件存在生成就会报错
采用随机数就可以有效的避免或者减少这种错误的出现