如何将java.lang.Class对象打印到文件中?

如何将java.lang.Class对象打印到文件中?,class,java,Class,Java,我试着寻找一种方法来动态编译一个类,我已经找到了创建一个编译类实例的方法。但是,我希望能够创建一个可执行的.class文件。如果可能的话,我将如何将类对象输出到.Class文件。如果这是错误的,请解释我将如何做到这一点。不要。而是制作一个可执行的jar 如果您觉得可执行jar不是您所需要的,那么还有其他选项。本页介绍了从字符串编译Java代码,生成.class文件的过程。这里是该页面的一个简短版本,另外还有注释良好的代码 public class CompilerAPITest { fi

我试着寻找一种方法来动态编译一个类,我已经找到了创建一个编译类实例的方法。但是,我希望能够创建一个可执行的.class文件。如果可能的话,我将如何将类对象输出到.Class文件。如果这是错误的,请解释我将如何做到这一点。

不要。而是制作一个可执行的jar

如果您觉得可执行jar不是您所需要的,那么还有其他选项。本页介绍了从字符串编译Java代码,生成.class文件的过程。这里是该页面的一个简短版本,另外还有注释良好的代码

public class CompilerAPITest {
    final Logger logger = Logger.getLogger(CompilerAPITest.class.getName()) ;

    /** Java source code to be compiled dynamically */
    static String sourceCode = "package com.accordess.ca;" +
        "class DynamicCompilationHelloWorld{" +
            "public static void main (String args[]){" +
                "System.out.println (\"Hello, dynamic compilation world!\");" +
            "}" +
        "}" ;

    /* Object initialization and compilation. */
    public void doCompilation (){
        SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject ("com.accordess.ca.DynamicCompilationHelloWorld", sourceCode) ;
        JavaFileObject javaFileObjects[] = new JavaFileObject[]{fileObject} ;
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null);
        Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(javaFileObjects);
        //This example places the output files under bin folder.
        String[] compileOptions = new String[]{"-d", "bin"} ;
        Iterable<String> compilationOptions = Arrays.asList(compileOptions);
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
        CompilationTask compilerTask = compiler.getTask(null, stdFileManager, diagnostics, compilationOptions, null, compilationUnits) ;
        boolean status = compilerTask.call();
        if (!status){//If compilation error occurs
            for (Diagnostic diagnostic : diagnostics.getDiagnostics()){
                System.out.format("Error on line %d in %s", diagnostic.getLineNumber(), diagnostic);
            }
        }
        try {
            stdFileManager.close() ;//Close the file manager
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String args[]){
        new CompilerAPITest ().doCompilation() ;
    }
}

class DynamicJavaSourceCodeObject extends SimpleJavaFileObject{
    private String qualifiedName ;
    private String sourceCode ;

    protected DynamicJavaSourceCodeObject(String name, String code) {
        super(URI.create("string:///" +name.replaceAll("\\.", "/") + Kind.SOURCE.extension), Kind.SOURCE);
        this.qualifiedName = name ;
        this.sourceCode = code ;
    }

    @Override
    public CharSequence getCharContent(boolean ignoreEncodingErrors)
            throws IOException {
        return sourceCode ;
    }
    // ... getters and setters
}

你能说清楚一点吗,很抱歉,我没能理解这个问题,你所说的创建一个可执行的类文件到底是什么意思?没有类文件可以由操作系统直接执行-JVM启动,然后调用给定类上的main方法。类文件已经通过java命令执行。你到底有什么问题?每次都输入那个长java命令?只需创建一个.bat或.sh文件,在其中输入完整的命令。我正在查看单词compile a class on the fly-我假设您是从现有程序(即字节代码生成)以编程方式生成类文件,而不是使用javac编译源代码。是这样吗?是的,这正是我想做的。