在代码运行时,我一直试图通过绝对路径导入.class,但我不知道如何实现。
当类已经在项目的构建路径中时,我通过Class.forName();
找到了一种导入类的方法,但是我需要找到一种方法来加载不存在于构建路径中的类。
目标是:
问题在于第三点,因为我不知道在代码运行时是否可以加载类。
我尝试过使用URLClassLoader
,但是我得到了ClassNotFound错误。
编辑:
基本上,我有一个静态函数,它应该以名称返回Class,但是urlClassLoader.loadClass()会抛出错误。
文件名为J48.class,因此,对于className参数,我尝试使用"J48“、"J48.class”,但没有一种方法有效。
此外,我还尝试将文件夹分类器设置为构建路径,并将参数设置为"weka.classifiers.trees.J48“,这是这个类的完整路径(包结构为weka.classifiers.trees)。
`public static Class getClassByName(String className) throws MalformedURLException, ClassNotFoundException
{
URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[] {
new URL("file:///D:\\xampp\\htdocs\\prog-ing\\classifiers\\")
});
Class class = urlClassLoader.loadClass(className);
return class;
}`
发布于 2018-06-04 10:19:02
好的,经过一番思考,我只得到了一个解决方案(仍然不满意),它是:
每个需要由用户上传的类都被保存到这个项目的工作区中,因此我能够使用Class.forName();
来获得类,在我的例子中指出了这个上传类的“文件夹”:Class.forName("classifiers.className");
。
发布于 2018-05-29 11:45:29
我想我有个解决你问题的建议..。
我知道两种选择:
示例:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Test5 extends ClassLoader {
private static final String PATH = "C://myFiles//";
public static void main(String[] args) {
Class clazz = getClassFromName("Test4");
System.out.println(clazz);
}
private static Class getClassFromName(String className) {
File file = new File(PATH + className + ".class");
try {
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
return defineClass(className, bytes, 0, bytes.length);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
这将打印如下内容:
类Test4
示例:
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Test5 {
private static final String PATH = "C://myFiles//";
public static void main(String[] args) {
Class clazz = getClassFromFile("myJar.jar", "com.mypackage.Test4");
System.out.println(clazz);
}
private static Class getClassFromFile(String fromFile, String className) {
try {
URL url = new URL("file:////" + PATH + fromFile);
URLClassLoader urlClassLoader = URLClassLoader.newInstance(
new URL[] {
url
});
return urlClassLoader.loadClass(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}
这将打印如下内容:
类com.mypackage.Test4
注意,要读取jar文件,我必须将包的完整路径放到类文件中。
希望我能帮上忙。
https://stackoverflow.com/questions/50583347
复制相似问题