2016-10-26 7 views
-2

자바에서 java 클래스 파일을 문자열로 읽어야하는 요구 사항이 있습니다. 내 예상 출력이Java 클래스 파일을 Java 문자열로 읽는 방법은 무엇입니까?

공공과 같이 이제까지 내가이 간단한 텍스트 파일 작동으로 작동하도록 코드를 기대하고, 컨텐츠 변수를 인쇄 할 때

내 코드

String path = "C:/java/MainClass.class"; 
String content = new String(Files.readAllBytes(Paths.get(path))); 

입니다 클래스 MainClass {public static void main (String [] args) { System.out.print ("테스트 파일"); }} 나는 또한 전직을위한 문자열로 다른 형식의 파일을 읽을 수 앞으로

:

은 제가 알아서하는 데 필요한 변화가 무엇인지 알려 주시기 바랍니다의 .config .cs, 평, 그래서 나는 그것을 간단한 텍스트 파일로 읽었다.

+1

Java 클래스는 byteCode로 컴파일됩니다. 바이트는 반드시 문자열로 변환 될 수 없습니다. –

+1

.class 파일은 컴파일 된 코드. 대신 .java 파일을 읽도록 변경하고 싶을 수도 있습니다. – kjsebastian

+0

기대가 잘못되었습니다. ".class"파일에는 java 소스 코드가 들어 있지 않습니다. 간단한 텍스트 편집기로 열어 볼 수 있습니다. 그 외에 다른 일반 텍스트 파일처럼 문자열로 읽을 수 있어야합니다. – Fildor

답변

4

내가 간단한 텍스트 파일로 읽을 수 있도록주의해야 할 변경 사항을 알려주십시오.

당신이하려는 것은 불가능합니다. ".class"파일에는 소스 코드가 아닌 바이트 코드가 들어 있으며 바이트 코드는 원래 Java 소스 코드로 되돌릴 수 없습니다.

최선의 방법은 디 컴파일러를 사용하는 것입니다.

  • 디 컴파일러가 다시 당신에게 원래의 소스 코드를 제공하지 않으며, 많은 경우에
  • 는 디 컴파일러는 당신이 읽을 수 없거나 uncompilable 자바 코드 물건을 줄 것이다 : 그러나 조심.

또 다른 대안은 역 어셈블러를 사용하여 javap 명령의 출력과 같은 형식으로 코드를 가져 오는 것입니다.


반면에 Java에서 ".java"파일을 읽으려는 경우 코드가 정상적으로 작동합니다. 유일한 주름은 소스 코드 파일에 사용 된 문자 인코딩 일 수 있지만 대부분의 Java 소스 코드는 ASCII로 인코딩됩니다 ...

+0

.class 파일의 내용에 대한 잘못된 가정 외에도 파일 내용을 문자열로 읽는 것과 관련하여 질문의 일부가 여전히 가능합니다. (내가 ** ** downvote하지 않았다) – Fildor

+0

나는 동의하지 않는다. 그는 .class 파일을 "간단한 텍스트 파일"로 읽을 수 있는지 물었다. 그 의미는 사람이 읽을 수 있어야한다는 것입니다. 선택한 문자 인코딩에 관계없이 클래스 파일을 간단한 텍스트로 디코딩 할 수 없습니다. –

+0

@StephenC, Fildor – vjnan369