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文件内容。可以作如下理解:
首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。
通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了。接下来需要解读成乙方可以理解的东西
既然你使用了FileInputStream()。那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据
解读完成后要输出呀。那当然要转换成IO可以识别的数据呀。那就需要调用字节码读取的方法BufferedReader()。同时使用bufferedReader()的readline()方法读取txt文件中的每一行数据哈。
你这个是函数用错了,应该使用bufferReader读取文件里的内容,而不是写
你动态写入的java文件都没有编译,启动的时候就没有加载到JVM里面去,当然获取不了。你要动态编译再动态加载到JVM里面去。网上随便搜了一下有这方面的例子的:https://www.liaoxuefeng.com/article/1080190250181920