我已經通過了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程序嗎?
我已經通過了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程序嗎?
簡短的回答是否定的。我不知道「c:\ winapp」是不是一個'標準'目錄,但是Java庫中沒有任何東西會自動將c: \ winapp在Linux上使用/ usr。因此,你必須在運行時檢測操作系統,並使用適當的路徑(硬編碼到你的應用程序中)或者使用System.getProperty(),並讓用戶設置系統屬性。
稍微好一點的方法可能是將配置文件放在用戶的主目錄中。 然後,你可以做System.getProperty(「user.home」),並且用戶不需要設置任何東西。
簡答:是的。
我希望你知道,你的應用程序是如何打包的。例如。
/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文件之一。
ya正在檢查 – overexchange 2014-12-08 08:24:27
'winapp'是產品安裝程序創建的文件夾,很抱歉讓您感到困惑 – overexchange 2014-12-08 07:19:55