java - 在java中将类内容打印到控制台

标签 java file class decompiling decompiler

我正在努力让学校的一个小程序变得更好,因为我比类的其他人更先进,并且想玩得开心。这是一个简单的 java 命令行程序,但我想用完整的 GUI 来制作它。

所以基本上我想在执行时访问 JAR 文件并打印(通过菜单选择的)类文件中编写的代码。我已经知道如何找到 JAR 文件并且这可行,但我找不到任何方法来进入 JAR 文件。我尝试创建一个 File 对象,并将 JAR 的路径与我想要访问的类文件的路径结合起来。 (例如:WinRAR 中的“C:\temp\Test\program.jar\de\bbzsogr\Main.class”)

这是我编写的“CodeGrabber”类的一些代码,用于访问 JAR 以及 JAR 中的文件。


public class CodeGrabber {

    private static File JAR;

    public static void grabCode(String className) {

        try {
            JAR = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        System.out.println("JAR is located in: " + JAR);

        // -> "JAR is located in: C:\temp\Test.jar"

        System.out.println("Searching for \"" + JAR + File.separator + "ch" + File.separator + "bbzsogr" + File.separator + "Main.class");

        // -> "Searching for "C:\temp\Test.jar\ch\bbzsogr\Main.class" "

        File main = new File(JAR + File.separator + "ch" + File.separator + "bbzsogr" + File.separator + "Main.class");

        try {
            Scanner scanner = new Scanner(main);

            while(scanner.hasNext()) {
                System.out.println(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            System.out.println("File MAIN not found...");
            return;
        }

        // -> "File MAIN not found..."

    }

}


我异常(exception)地得到了一堆乱七八糟的数据,因为该文件(如果我可以访问它)仍然被编码/编译,但我收到消息,找不到所需的文件。

提前致谢!!

最佳答案

如果你想在java程序中添加和访问一个jar文件,你必须导入这个jar包含的java类并使用它们的方法。你应该写类似的东西 导入prog.mainclass 在程序的开头,而不是尝试通过 Jar 访问它。

对于你现在所问的问题,你的程序找不到jar的原因是你导入的路径无效。Java不能在任何程序内部搜索,只能在文件系统内部搜索。任何路径都应该不带点类似于 C:/temp/path 并且不能,例如 C:/temp.csv/path

关于java - 在java中将类内容打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58004622/

相关文章:

java - 防止并发回调代码运行两次

java - 如何获取两个日期之间的 SVNKit 日志?

java - Jsp页面关闭html和body标签的目的

c++ - 类前向声明

javascript - append 元素上的绑定(bind)方法

java - Java 中私有(private)静态嵌套类中的访问修饰符

java - 使用着色 jar 作为依赖项导致原始项目中出现着色

php - 大文件上传

c++ - 比较文件统计时间

python - 使用 Python 删除/复制多个文件