2014-01-21 5 views
1

솔직히 말해서 가능하거나 불가능하다는 것을 알지 못합니다. 하지만 내가하려는 것은 아래와 같습니다.Java에서 .class 파일의 인스턴스를 얻을 수있는 방법

  1. 터미널의 javac 명령을 통해 ClassFile.java에서 클래스 파일을 만들었습니다.
  2. 그런 다음 .java 파일 또는 .class 파일에서 인스턴스를 가져 오려고합니다.
  3. 다음으로 이클립스에서 다른 프로젝트를 만들었습니다.이 프로젝트 경로와 상위 파일 경로가 완전히 다른 것 같아요. 예를 들어, ClassFile.java/class 파일은 '~/Downloads'폴더에 위치 할 수 있고, 다른 한편으로는 새로운 eclipse 프로젝트가 '~/workspace /'에있을 수 있습니다.
  4. 그래서 FileInputStream에서 1 단계에서 참조한 파일을 읽습니다.
  5. 여기에서 코드를 붙여 넣습니다.

    공용 클래스 홈페이지 {

    private static final String CLASS_FILE_PATH = 
         "/Users/juneyoungoh/Downloads/ClassFile.class"; 
    
    private static final String JAVA_FILE_PATH = 
         "/Users/juneyoungoh/Downloads/ClassFile.java"; 
    
    private static Class getClassFromFile(File classFile) throws Exception { 
        System.out.println("get class from file : [" + classFile.getCanonicalPath() + " ]"); 
        Object primativeClz = new Object(); 
        ObjectInputStream ois = null; 
        ois = new ObjectInputStream(new FileInputStream(classFile)); 
        primativeClz = ois.readObject(); 
        ois.close(); 
        return primativeClz.getClass(); 
    } 
    
    public static void main(String[] args) throws Exception { 
        getClassInfo(getClassFromFile(new File(CLASS_FILE_PATH))); 
    } 
    

    } 당신의 가정 같은

,이 코드는 오류가 있습니다. 예를 들어, 그것은 보여줍니다

java.io.StreamCurruptedException: invalid stream header : CAFEBABE 

이가 된 .class 파일이나 된 .java 파일에서 객체 인스턴스 얻을 수있는 방법?

P. 추가 라이브러리를 사용하지 않기를 바랍니다.

+0

코드에서 언급 한 파일 이름이 유감 스럽지만 'HelloWorld.class'가 아니라 'ClassFile.class'입니다. 나는 단지 설명하려고 노력했다; –

+0

가능한 [폴더 또는 JAR에서 런타임에 클래스를로드하는 방법] (http://stackoverflow.com/questions/11016092/how-to-load-classes-at-runtime-from-a-folder-or) -jar) –

+0

나는 똑같은 방식 일 수 있지만 약간 다를 수 있다고 생각합니다. 어쨌든, 고마워요 : D –

답변

5
private static final String CLASS_FOLDER = 
     "/Users/juneyoungoh/Downloads/"; 

private static Class getClassFromFile(String fullClassName) throws Exception { 
    URLClassLoader loader = new URLClassLoader(new URL[] { 
      new URL("file://" + CLASS_FOLDER) 
    }); 
    return loader.loadClass(fullClassName); 
} 

public static void main(String[] args) throws Exception { 
    System.out.println((getClassFromFile("ClassFile")); 
} 
+0

고마워요 :-) 마침내 다른 .class 파일에있는 main 메서드를 호출합니다. 고마워요. D –