package com.coderising.jvm.loader;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class ClassFileLoader {
private List<String> clzPaths = new ArrayList<String>();
public byte[] readBinaryCode(String className) {
String path = getClassFilePath(className);
if (path != null) {
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
int count = bis.available();
byte[] content = new byte[count];
int len = bis.read(content,0,count);
return content;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private byte[] loadClassFile(String clzFileName) {
return null;
}
public void addClassPath(String path) {
clzPaths.add(path);
}
public String getClassPath_V1() {
return null;
}
public String getClassPath() {
StringBuilder sb = new StringBuilder();
for (String s : clzPaths) {
sb.append(s);
sb.append(";");
}
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
private String getClassFilePath(String className) {
StringBuilder sb = new StringBuilder();
for (String path : clzPaths
) {
sb.append(path);
sb.append("\\");
char[] classname = className.toCharArray();
for (int i = 0; i < classname.length; i++) {
if (classname[i] == '.') {
sb.append("\\");
} else {
sb.append(classname[i]);
}
}
sb.append(".class");
String classpath = sb.toString();
File file = new File(classpath);
if (file.exists()) {
return classpath;
}
}
return null;
}
}