本地加载class文件
package com.utils.utils;
import java.io.*;
/**
* @Auther: ZHANG PU
* @Date: 2024/7/29 17:31
* @Description:
*/
public class FileClassLoad extends ClassLoader {
/**
* class文件所在磁盘
*/
private String directory = "";
public FileClassLoad(String directory) {
this.directory = directory;
}
public FileClassLoad(ClassLoader parent, String directory) {
super(parent);
this.directory = directory;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String file = directory + File.separator + name.replace(".", File.separator) + ".class";
try
{
FileInputStream fileInputStream = new FileInputStream(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = fileInputStream.read(buffer)) != -1)
{
byteArrayOutputStream.write(buffer, 0, len);
}
byte[] data = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
fileInputStream.close();
return defineClass(name, data, 0, data.length);
} catch (FileNotFoundException e)
{
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
FileClassLoad fileClassLoad = new FileClassLoad("E:");
Class<?> aClass = fileClassLoad.findClass("xx.xx.xx.xx");
Object o = aClass.newInstance();
}
}
网络地址加载
package com.utils.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
/**
* @Auther: ZHANG PU
* @Date: 2024/7/29 18:44
* @Description:
*/
public class UrlClassLoad extends ClassLoader {
private String url;
public UrlClassLoad(ClassLoader parent, String url) {
super(parent);
this.url = url;
}
public UrlClassLoad(String url) {
this.url = url;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
try
{
URL path = new URL(url + "/" + name.replace(".", "/") + ".class");
InputStream inputStream = path.openStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inputStream.read(buffer)) != -1)
{
byteArrayOutputStream.write(buffer, 0, len);
}
byte[] data = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
inputStream.close();
return defineClass(name, data, 0, data.length);
} catch (MalformedURLException e)
{
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}
}