【问题标题】:How do I get the output CLASS file names after compiling Java files in C#?在 C# 中编译 Java 文件后如何获取输出 CLASS 文件名?
【发布时间】:2011-09-19 19:08:07
【问题描述】:

因此,当您将 Java (.java) 编译为类文件 (.class) 时,文件的名称可以更改,文件的扩展名也可以更改。如果我在 C# 中有一段代码将 java 代码编译为类文件,那么我将如何在 C# 中获取这些输出类文件的名称?

【问题讨论】:

  • 你的C#代码是如何编译java代码的?可以发一下 C# 代码吗?
  • 如果类是公共的,那么它的文件名应该和类名一样。
  • 它只是在系统上执行javac。

标签: c# java


【解决方案1】:

当你编译一个 .java 文件时,你会为文件中声明的每个类获得一个 .class 文件。这意味着必须与文件名匹配的主类,以及任何内部类和匿名类。

class Outer {

    static class Inner {

    }

    public void run() {
        Thread t = new Thread(new Runnable() {
            public void run() {
                // code here
            }
        });
    }

}

将产生:

Outer.class
Outer$Inner.class
Outer$1.class

因此,假设您正在构建一个干净的目录,您可以获取带有 .class 扩展名的文件列表,并通过知道将有一个是 Foo.class 和其他类来获取 Foo.java 中所有类的列表以Foo$ 开头。现在这可能会被破坏,因为从技术上讲,您可以拥有自己的包含 $ 的类,但强烈建议您不要这样做,因为它通常表示系统生成的类文件。

【讨论】:

【解决方案2】:

您可以使用编译器选项,例如:javac -d 目录 使用Process类启动java编译器

Process.StartInfo.FileName = "javac";

首先你应该生成一个临时目录。

Directory.Create(Application.StartupPath + @"/TemporaryJavaFiles");
Process.StartInfo.Arguments = "-d "+Application.StartupPath + @"/TemporaryJavaFiles";
Process.Start();
string[] JavaClassess = Directory.GetFilesApplication.StartupPath + @"/TemporaryJavaFiles");

【讨论】:

    【解决方案3】:

    string[] filePaths = Directory.GetFiles(@directoryString, "*.class"); 呢?

    【讨论】:

      【解决方案4】:

      使用javac -verbose yourclass.java 并在输出中搜索以[wrote] 开头的行。

      【讨论】:

        猜你喜欢
        • 2016-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 2020-12-14
        • 2014-01-22
        • 2021-02-20
        • 2011-01-09
        相关资源
        最近更新 更多