Как открыть файл класса с помощью notepad ++? - PullRequest
4 голосов
/ 05 февраля 2012

Я открываю папку класса Minecraft с помощью Notepad ++. Но всякий раз, когда я открываю его, в нем просто есть несколько блоков с надписями Nul, DC1, SO, SOH, FF, STX и т. Д. В руководствах я вижу, что файл класса открывается просто отлично, что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 05 февраля 2012

Вы пытаетесь редактировать скомпилированный класс Java.

Это не текстовый файл, поэтому вы не можете редактировать его с помощью текстового редактора.Вам нужен файл .java, и я не верю, что Minecraft имеет открытый исходный код.

Проверьте ваши гиды еще раз, вы, вероятно, отклонились от пути, по которому они собирались вас вести.

1 голос
/ 09 августа 2012

вы не можете просмотреть источник файла, если он все еще скомпилирован, вы должны декомпилировать файл класса в файл Java, а затем вы можете прочитать файл с помощью notepad / eclipse, есть программа, которую люди создали для декомпиляции источник Minecraft, так что вы можете редактировать его, он называется mcp

http://mcp.ocean -labs.de / index.php / MCP_Releases

Просто скачайте это и продолжайте, как и положено, тогда вы можете свободно редактировать код

0 голосов
/ 29 июля 2018

Если вы хотите открыть файл класса как есть, используйте любой бинарный редактор. Гекс хороший. Вы можете сделать:

ghex MyClass.class

javap - это встроенный инструмент для разбора файлов классов java. Вот пример:

javap -v MyClass.class

Это предоставит вам много информации о вашем классе, его байт-коде и даже объяснение того, что он делает

Еще один замечательный инструмент для декомпиляции файлов классов Java - CFR: http://www.benf.org/other/cfr/ Пример:

java -jar cfr.jar MyClass.class

Источник:

import java.math.BigInteger;
import java.util.stream.Stream;

public class MyClass {

    public static void main(String[] args) {
        System.out.println(
                Stream.iterate(
                        new BigInteger[]{BigInteger.ZERO, BigInteger.ONE},
                        n -> new BigInteger[]{n[1], n[0].add(n[1])}
                )
                .limit(1001)
                .skip(1000)
                .findFirst()
                .get()[1]
        );
    }
}

CFR выход:

import java.io.PrintStream;
import java.math.BigInteger;
import java.util.Optional;
import java.util.stream.Stream;

public class MyClass {
    public static void main(String[] arrstring) {
        System.out.println(Stream.iterate(new BigInteger[]{BigInteger.ZERO, BigInteger.ONE}, arrbigInteger -> new BigInteger[]{arrbigInteger[1], arrbigInteger[0].add(arrbigInteger[1])}).limit(1001L).skip(1000L).findFirst().get()[1]);
    }
}
...