在 java 中动态加载 class 及其对象
Dynamically load a class and its object in java
我有一个 class 文件和一个 class 的已保存对象。我的 java 应用程序的库中没有 class。当我尝试使用 ObjectInputStream, it gives an ClassNotFoundException.
加载对象时
然后我使用下面的代码。
URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
classLoader.loadClass(classFile.getName().replace(".class", "")).newInstance();
myClass= (MyClass) FileIOManager.readObject(classObj);
但是这段代码在读取对象时也给了我同样的异常。希望能帮助我完成任务..
MyClass 没有包名称。
FileIOManager.readObject() 是我创建的一种读取对象的方法,它适用于我的库中具有 classes 的其他对象。
我将 FileIOManager
class 中创建的 readObject()
方法更改为以下内容..
public static Serializable readObject(String path) throws FileNotFoundException, IOException, ClassNotFoundException {
return readObject(path, null);
}
public static Serializable readObject(String path, final ClassLoader classLoader) throws FileNotFoundException, IOException, ClassNotFoundException {
Serializable obj;
try (FileInputStream fis = new FileInputStream(path); ObjectInputStream ois = new ObjectInputStream(fis) {
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
if (classLoader == null) {
return super.resolveClass(desc);
}
return Class.forName(desc.getName(), false, classLoader);
}
}) {
obj = (Serializable) ois.readObject();
}
return obj;
}
这里 path
是 class 文件的路径。
并获取对象如下。
URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
myClass = (MyClass) FileIOManager.readObject(loc, classLoader);
我有一个 class 文件和一个 class 的已保存对象。我的 java 应用程序的库中没有 class。当我尝试使用 ObjectInputStream, it gives an ClassNotFoundException.
加载对象时然后我使用下面的代码。
URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
classLoader.loadClass(classFile.getName().replace(".class", "")).newInstance();
myClass= (MyClass) FileIOManager.readObject(classObj);
但是这段代码在读取对象时也给了我同样的异常。希望能帮助我完成任务..
MyClass 没有包名称。
FileIOManager.readObject() 是我创建的一种读取对象的方法,它适用于我的库中具有 classes 的其他对象。
我将 FileIOManager
class 中创建的 readObject()
方法更改为以下内容..
public static Serializable readObject(String path) throws FileNotFoundException, IOException, ClassNotFoundException {
return readObject(path, null);
}
public static Serializable readObject(String path, final ClassLoader classLoader) throws FileNotFoundException, IOException, ClassNotFoundException {
Serializable obj;
try (FileInputStream fis = new FileInputStream(path); ObjectInputStream ois = new ObjectInputStream(fis) {
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
if (classLoader == null) {
return super.resolveClass(desc);
}
return Class.forName(desc.getName(), false, classLoader);
}
}) {
obj = (Serializable) ois.readObject();
}
return obj;
}
这里 path
是 class 文件的路径。
并获取对象如下。
URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
myClass = (MyClass) FileIOManager.readObject(loc, classLoader);