我遇到这个问题,我有一个程序可以编写和创建一个 .java 文件并将其放在我的包文件夹中,之后它会从 .java 文件中获取信息并在其中自行使用它。 (它使用我随后导入的方法创建了一个新类)。 问题是,如果在我使用 eclipse 更新“自行创建的文件”之前它不会工作。有没有办法让我的主文件更新“自己创建的文件”。
抱歉,如果这是重复的。我只是找不到它。
我的代码:
package dk.Nicolai.Bonde;
import java.io.*;
public class main {
public String outputString ="Math.sqrt(25)" ;
static String outputPath ="src/output.txt";
/**
* @param args
* @throws UnsupportedEncodingException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws IOException{
new main().doit(args);
}
public void doit(String[] args) throws IOException{
PrintWriter writer = new PrintWriter("src/dk/Nicolai/Bonde/calculate.java", "UTF-8");
writer.println("package dk.Nicolai.Bonde;");
writer.println("public class calculate{");
writer.println("public void calc(){");
writer.println("System.out.println("+outputString+");");
writer.println("}");
writer.println("}");
writer.flush();
writer.close();
calculate calcObj = new calculate();
calcObj.calc();
}
}
最佳答案
你的主要错误是你期望它在运行时在保存后自动编译成 .class
文件(每次你按下 Ctrl 时,像 Eclipse 这样的理智的 IDE 会在幕后自动为你做+S)。因此,这是不正确的。运行时需要自己编译 JavaCompiler
然后通过 URLClassLoader
加载.这个相关问题和答案中给出了一个具体示例:How do I programmatically compile and instantiate a Java class?
在具体示例中,您还会注意到您不能仅 new calculate();
之后。类路径不会在运行时左右自动刷新。您需要执行 Class#forName()
,传递 FQN 和 URLClassLoader
。例如
Calculate calculate = (Calculate) Class.forName("com.example.Calculate", true, classLoader);
您的另一个错误是您依赖于磁盘文件系统的当前工作目录始终是 Eclipse 项目的源根文件夹。这不稳健。在构建和分发应用程序时,此文件夹根本不存在。您应该将文件写入 IDE 项目结构之外的其他位置的固定/绝对文件夹。这也包含在前面链接的答案中。
关于java - 如何让java使用最新版本的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13960304/