在程序里动态生成一个类文件再加载,找不到


public class text {

    public static void main(String[] args) throws ClassNotFoundException, IOException {
        String str = "package date20200321.sorm.utils;\n" +
                "\n" +
                "/**\n" +
                " * @description:\n" +
                " * @Author: YaoDong\n" +
                " * @Date: 2021/1/15 2:45 下午\n" +
                " */\n" +
                "public class t {\n" +
                "    private int age;\n" +
                "\n" +
                "    static {\n" +
                "        System.out.println(\"t-----------\");\n" +
                "\n" +
                "    }"
                +
                "    public t(int age) {\n" +
                "        this.age = age;\n" +
                "    }\n" +
                "\n" +
                "    public int getAge() {\n" +
                "        return age;\n" +
                "    }\n" +
                "\n" +
                "    public void setAge(int age) {\n" +
                "        this.age = age;\n" +
                "    }\n" +
                "}\n";


        File file = new File("/Users/huxiao/Documents/yaodong/JAVA-myself-code/java-learning/src/date20200321/sorm/utils/t.java");
        if (!file.exists()) {
            file.createNewFile();

        }
        System.out.println("纯在:" + file.exists());
        BufferedWriter writer=null;
        writer = new BufferedWriter(new FileWriter(file));
        writer.write(str);
        writer.flush();
        writer.close();

        Class c=Class.forName("date20200321.sorm.utils.t");
    }
}
如上所示,在text立面生成一个t.java的类,然后再继续加载这个类。但显示找不到这个类。如果先生成,再在另一个程序里加载是可以的。

因为你生成java文件是在启动项目之后,启动时会把代码进行编译,编译后才能使用,你代码里生成的java文件是源码并没有编译

而且如果要直接能访问的话,要把编译后的文件放在target文件夹里,target文件夹是项目启动时缓存编译文件的地方

先编译这个文件再启动即可

java读取txt文件内容。可以作如下理解:

  1. 首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。

  2. 通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了。接下来需要解读成乙方可以理解的东西

  3. 既然你使用了FileInputStream()。那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据

  4. 解读完成后要输出呀。那当然要转换成IO可以识别的数据呀。那就需要调用字节码读取的方法BufferedReader()。同时使用bufferedReader()的readline()方法读取txt文件中的每一行数据哈。

你这个是函数用错了,应该使用bufferReader读取文件里的内容,而不是写

你动态写入的java文件都没有编译,启动的时候就没有加载到JVM里面去,当然获取不了。你要动态编译再动态加载到JVM里面去。网上随便搜了一下有这方面的例子的:https://www.liaoxuefeng.com/article/1080190250181920