gpt4 book ai didi

java - 以编程方式将新类添加到项目中

转载 作者:行者123 更新时间:2023-12-02 07:27:07 26 4
gpt4 key购买 nike

我在 Java 项目中从光盘读取文件。我在 D:/上找到了我的 hohoho.java 文件,它是文件格式,然后我想将它作为一个类添加到我的主类 (Up.java) 的现有包中。它应该看起来像这样 - package -> Up.java, Hohoho.java。

当然应该以编程方式完成。我将在我的 Up.java 中使用这个 .java 文件及其函数。

你知道有什么简单的方法可以做到这一点吗?

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Iterator;

public class Up{

public static void main(String[] args) {

File root = new File("..\\.");
File myfile = null;

try {

String[] extensions = {"java"};
boolean recursive = true;

Collection files = FileUtils.listFiles(root, extensions, recursive);

for (Iterator iterator = files.iterator(); iterator.hasNext();) {
File file = (File) iterator.next();
String path = file.getAbsolutePath();
System.out.println("File = " + path);

String[] tokens = path.split("\\\\");

for (String t : tokens)
if (t.equals("Hohoho.java")){
myfile = file;
}
}

System.out.println("Client class: " + myfile.getAbsolutePath());

} catch (Exception e) {
e.printStackTrace();
}

}
}

最佳答案

如果您只需要加载 .class 文件,根据您的评论,您应该能够使用如下内容(假设您的设置中没有安全问题):

    String path = "/path/to/your/classfiles/root/"; //not including the package structure
ClassLoader loader = new URLClassLoader(new URL[]{new URL("file://" + path)}, Up.class.getClassLoader());

Class clazz = loader.loadClass("foo.Hohoho"); //assuming a package "foo" for that class
Object loadable = clazz.newInstance();
Field field = loadable.getClass().getField("someField"); //or whatever - (this assumes you have someField on foo.Hohoho)

System.out.println(field.get(loadable));

(我删除了上面的所有异常处理)。正如 @stemm 指出的,仅使用纯反射,这将是很痛苦的工作。

此外,接下来是从 VM 内部以尽可能简单的方式调用 java 编译器的快速测试。因此,如果您确实需要从源代码开始,您可以以此为基础:

    String sourcePath = "/path/to/your/javafiles/root/"; 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int success = compiler.run(null, null, null, sourcePath + "foo/Loadable.java");//can't get "-sourcepath","path" to go, for some reason.

System.out.println("success = " + success); //should be 0; Sys err should have details, otherwise

关于java - 以编程方式将新类添加到项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13396872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com