2014-12-07 27 views
1

我已經通過了query,但沒有得到正確的答案。從Linux和Windows使用Java讀取文件

我有conf.txt Windows文件夾中c:\winapp\Game\core\conf.txt

我在Linux文件夾/usr/Game/core/conf.txt

所以有conf.txt,我知道,從Game文件夾

啓動時沒有使用像System.getProperty("") OS特定代碼的相對路徑,我們有辦法編寫一個可移植的Java程序嗎?

回答

0

簡短的回答是否定的。我不知道「c:\ winapp」是不是一個'標準'目錄,但是Java庫中沒有任何東西會自動將c: \ winapp在Linux上使用/ usr。因此,你必須在運行時檢測操作系統,並使用適當的路徑(硬編碼到你的應用程序中)或者使用System.getProperty(),並讓用戶設置系統屬性。

稍微好一點的方法可能是將配置文件放在用戶的主目錄中。 然後,你可以做System.getProperty(「user.home」),並且用戶不需要設置任何東西。

+0

'winapp'是產品安裝程序創建的文件夾,很抱歉讓您感到困惑 – overexchange 2014-12-08 07:19:55

0

簡答:是的。

我希望你知道,你的應用程序是如何打包的。例如。

/core/conf.txt 
/lib/*.jar 
/bin/*.(sh|cmd|exe) 

在這種情況下,你可以使用

public static void main(String[] args) throws Exception { 
    String home = System.getenv("GAME_HOME"); // For dev environment. 
    File appHome; 

    if (home == null) { 
     File libs = new File(Test.class.getProtectionDomain().getCodeSource().getLocation().toURI()); 
     appHome = new File(libs, ".."); 
    } 
    else { 
     appHome = new File(home); 
    } 

    appHome = appHome.getCanonicalFile(); 
    System.out.println("App home directory: " + appHome); 
} 

當然測試類的應放置在lib/*。jar文件之一。

+0

ya正在檢查 – overexchange 2014-12-08 08:24:27