如题
写一段代码
通过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的文件??

解决方案 »

  1.   

    int status=javac.compile(args);我想知道这个javac对象是怎么来的啊?
      

  2.   

    /**编译器*/
    private static com.sun.tools.javac.Main javac=new com.sun.tools.javac.Main();使用了tools.jar包
    java的动态编译
      

  3.   

    那文件的name是怎么得到的啊,不懂???
      

  4.   

    name是通过字符串截取出来的
    这个在调用这个方法的时候就传进来了
    关键是我要生成的文件名是Test.java
    不能是Test***.java
      

  5.   

    /**编译JavaCode,返回临时文件对象*/
        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
    高手帮忙
    谢了
      

  6.   

    createTempFile 会随机一个数字加在Test后, 如Test20091.java
      

  7.   

    问题已经解决
    说下思路
    提交的时候截取类名 name1
    提取生成的文件名 name2
    用name2替换掉name1
    ok,搞定为什么要这样操作,首先
    如果类名相同的class文件存在生成就会报错
    采用随机数就可以有效的避免或者减少这种错误的出现