這個題目其實有點大了,其實說的問題很小。
大家都說java是跨平台的,可是用Java寫出來的代碼能不能真正的跨平台還是要開發人員來把握。
我今天在CSDN上看到一位朋友給JDBMonitor提出的一條bug:
"如果我的系統是Linux,那個listenerconfig=就難寫了,因為我要是寫成/root/什麼的,他會認為是classpath,實際上這是個物理路徑,期待改進"
因為在上一個小版本中,我為了同時適應用戶通過類路徑指定配置文件的位置,比如,com/cownew/config.xml,也能通過真實的文件路徑制定文件的位置,比如c:/config.XML
所以我就要判斷用戶給出的路徑是類路徑還是文件路徑,我的實現方式是判斷路徑是否以a-z的字母開頭,並且後邊跟著":/",如果是,則為文件路徑,否則為類路徑。
但是在unix(Linux)下,絕對路徑則是/root/cfg/config.XML的形式,我就給誤判斷成是類路徑了。這樣在這些平台下就報錯了,我采用如下方式解決:
JDBMonitor會首先把當成類路徑去讀取,如果讀取失敗再把它當作文件路徑去讀,例如如果您設定/root/cfg/config.xml,本意是想加載文件路徑/root/cfg/下的文件config.xml,但是如果您的類路徑中有root.cfg這個包,並且包下同樣有config.xml這個文件,那麼JDBMonitor會去讀root.cfg中的文件config.xml,而非/root/cfg/config.XML。
示意代碼如下:
InputStream is = null;
is = this.getClass().getResourceAsStream(configFile);
if(is==null)
{
try
{
is = new FileInputStream(configFile);
} catch (FileNotFoundException e)
{
is = null;
}
}
不知道有沒有更好的辦法解決,請高手指教。有時間也去看看那些tomcat之類的服務器是怎麼解決這個問題的。