2011-09-19 68 views
1

因此,當您將Java(.java)編譯到類文件(.class)中時,文件的名稱可以更改,也可以更改文件的擴展名。如果我在C#中有一段代碼將Java代碼編譯到類文件中,那麼我將如何獲得C#中這些輸出類文件的名稱?在C#中編譯Java文件後,如何獲得輸出CLASS文件名?

+0

你的C#代碼是如何編譯java代碼的?你可以發佈C#代碼嗎? – Oded

+0

如果該類是公共的,那麼它的文件名應該與類名相同。 – denolk

+0

它只是在系統上執行javac。 – Alper

回答

0

當你編譯一個.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.java所有類的列表將會有一個是Foo.class和其他以Foo$開頭的。現在這可能會被破壞,因爲你在技術上允許你有自己的類,其中有$,但是強烈建議你不要這樣做,因爲它通常表示系統生成的類文件。

+0

如果Java類文件包含嵌套類會怎麼樣? – Burimi

+0

@Cody是否我的示例尚未使用嵌套類?或者也許我們正在根據不同的定義進行操作。我使用的是這裏定義的:http://download.oracle.com/javase/tutorial/java/javaOO/nested.html – corsiKa

+0

你是對的 – Burimi

0

您可以通過編譯器選項喜歡玩:javac的-d目錄 使用過程類來啓動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"); 
0

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

0

使用javac -verbose yourclass.java並在輸出中搜索以[寫入]開頭的行。