我有一个类文件和该类的保存对象。我的java应用程序在其库中没有该类。当我尝试使用ObjectInputStream加载对象时,它会提供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()是我为读取对象而创建的一个方法,它适用于在我的库中有类的其他对象。
答案 0 :(得分:0)
我将我创建的readObject()
类中的FileIOManager
方法更改为以下内容。
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
是类文件的路径。
获取对象如下。
URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
myClass = (MyClass) FileIOManager.readObject(loc, classLoader);