2013-04-07 3 views
0

Я пытаюсь получить класс из пути в файловой системе и получить из него байты. Я пробовал то, что ниже, но не имел успеха. Это должно просто распечатать имя на данный момент. Если у кого-нибудь есть идеи о том, как делать то, что я делаю, пожалуйста, дайте мне знать. Это может быть даже проще, чем это ...Чтение байтов из класса

public class Driver { 
public static void main(String[] args) throws Exception { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.print("Enter the path of the class: "); 
    String from = br.readLine(); 
    System.out.print("Enter the path to save the .txt file (with bytes): "); 
    String to = br.readLine(); 
    Class clazz = getClassFromPath(from); 
    System.out.println("Loaded <" + clazz.getName() + "> successfully!"); 
} 

public static Class<?> getClassFromPath(String path) { 
    try { 
     File file = new File(path); 
     URL[] urls = {new URL(path)}; 
     URLClassLoader cl = URLClassLoader.newInstance(urls); 
     if (!file.isDirectory() && file.getName().endsWith(".class")) { 
      String className = file.getName().substring(0, file.getName().length() - 6); 
      className = className.replace('/', '.'); 
      Class c = cl.loadClass(className); 
      return c; 
     } 
     for (File f : file.listFiles()) { 
      if (f.isDirectory() || !f.getName().endsWith(".class")) { 
       continue; 
      } 
      String className = f.getName().substring(0, f.getName().length() - 6); 
      className = className.replace('/', '.'); 
      Class c = cl.loadClass(className); 
      return c; 
     } 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
} 
+0

Спасибо за исправление этого вопроса ... У меня, кажется, проблемы с отправкой кода ... – JNorr44

ответ

3

Я уверен, что вы можете попробовать что-то вроде этого:

InputStream stream = clazz.getClassLoader().getResourceAsStream(classAsPath); 

где classAsPath является то, что вы на самом деле делаете на вашем методе getClassFromPath

Затем вы можете использовать Apache Commons-IO для чтения InputStream в байт [], используя что-то вроде IOUtils.toByteArray()

+2

+1 Это правильный подход. Но вам нужно сопоставить класс FQN с соответствующим именем пути. –

+0

@ Stephen C ты совершенно прав –

Смежные вопросы