這個題目其實有點大了,其實說的問題很小。
大家都說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會首先把<configfilepath>當成類路徑去讀取,如果讀取失敗再把它當作文件路徑去讀,例如如果您設定/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之類的服務器是怎么解決這個問題的。
JDBMonitor最強大的無侵入式數據庫監控、日志工具。
COWNEW團隊,最專業的開源團隊!官方網站: www.cownew.com