2009-04-22 505 views

回答

28
URL main = Main.class.getResource("Main.class"); 
if (!"file".equalsIgnoreCase(main.getProtocol())) 
    throw new IllegalStateException("Main class is not stored in a file."); 
File path = new File(main.getPath()); 

注意,大多數的class文件組裝成JAR文件,所以這不會在任何情況下(因此IllegalStateException)工作。但是,您可以使用此方法找到包含該類的JAR,並且可以通過調用getResourceAsStream()代替getResource()來獲取類文件的內容,並且無論該類是在文件系統上還是在一個JAR。

0

你需要什麼?如果您需要它來獲取位於同一目錄中的任何文件,那麼Class.getResourceAsStream()適用於此文件。

+1

試圖鎖定我的主類文件,以便不止一次啓動我的應用程序。 – 2009-04-22 17:08:42

0

這看起來更像是一個終端用戶問題。另外考慮可能需要運行任何給定應用程序的多個實例,並且防止用戶這樣做將成爲主要煩惱。

如果問題與臨時文件衝突,那麼只要確保所有的臨時文件都有唯一的名稱。據我瞭解,這是人們感到需要防止其應用程序的多個實例運行的最常見原因。

P.S .: java.io.File.createTempFile()方法非常適合防止臨時文件衝突,因爲它們會自動生成唯一的文件名。

相關問題