2015-09-26 68 views
0

所以我正在尋找將一個.jar移植到可執行文件,並且在我這樣做之前清理我的代碼。現在,我有以下幾點:本地文件對象的絕對路徑

BufferedImage bgImg = null; 
//Grabs the background image 
    try { 
     bgImg = ImageIO.read(new File("")); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

我有,我可以只使用幾個其他圖片:

new ImageIcon(getClass().getResource("imagename.png"))); 

然而,因爲前者是一個File對象,它不會採取相同類型的參數。我想知道是否有類似的東西可用於此目的,或者如果有其他方法可以使文件變爲絕對文件,以便在移植到可執行文件時沒有錯誤。謝謝!

+0

一個空文件名肯定是不行的。文件將在哪裏?你有辦法瞭解文件的路徑嗎?它總是會在同一個目錄中嗎?或者它會在相對於你知道的某個目錄中? – RealSkeptic

+0

是的,這是我的不好之處,在此之前,我已經充滿了一些東西(即嘗試使用相對目錄訪問文件失敗,只是文件的名稱等)。我原本是用它的確切路徑到我的桌面,但我把它移到項目工作目錄上的一個文件夾中。 – finaris

回答

1

使用read(InputStream input)法代替Class.getResourceAsStream()

例如:

bgImg = ImageIO.read(getClass().getResourceAsStream("imagename.png")); 
+0

這也適用。現在回顧一下,這更有意義(因爲我在新的File()的參數中使用了它)。 – finaris

1

我不確定你想要做什麼。但是您可以在路徑前用點打開當前工作目錄中的文件。

E.g.

ImageIO.read(new File("./imagename.png")); 
+0

這幾乎把我放在正確的道路上,它現在按預期工作! – finaris

+1

@finaris'。/'將相對於用戶從哪個目錄運行代碼,除非先改變工作目錄。從可移植性的角度來看,您最好使用'getResources *'方法,它將使用classpath代替 –

+0

@finaris Alastair是對的。 「移植到可執行文件」是什麼?一個可執行的jar(那麼你可以像以前一樣使用classpath資源)?或者一個非java可執行文件?在第二種情況下,大多數編程語言給你一個參數數組(就像在java main中)。有時候你可以在索引0處訪問可執行文件的路徑。 –