這個(gè)題目其實(shí)有點(diǎn)大了,其實(shí)說的問題很小。
大家都說java是跨平臺(tái)的,可是用java寫出來的代碼能不能真正的跨平臺(tái)還是要開發(fā)人員來把握。
我今天在CSDN上看到一位朋友給JDBMonitor提出的一條bug:
"如果我的系統(tǒng)是linux,那個(gè)listenerconfig=就難寫了,因?yàn)槲乙菍懗?root/什么的,他會(huì)認(rèn)為是classpath,實(shí)際上這是個(gè)物理路徑,期待改進(jìn)"
因?yàn)樵谏弦粋€(gè)小版本中,我為了同時(shí)適應(yīng)用戶通過類路徑指定配置文件的位置,比如,com/cownew/config.xml,也能通過真實(shí)的文件路徑制定文件的位置,比如c:/config.xml
所以我就要判斷用戶給出的路徑是類路徑還是文件路徑,我的實(shí)現(xiàn)方式是判斷路徑是否以a-z的字母開頭,并且后邊跟著":/",如果是,則為文件路徑,否則為類路徑。
但是在unix(linux)下,絕對(duì)路徑則是/root/cfg/config.xml的形式,我就給誤判斷成是類路徑了。這樣在這些平臺(tái)下就報(bào)錯(cuò)了,我采用如下方式解決:
JDBMonitor會(huì)首先把<configfilepath>當(dāng)成類路徑去讀取,如果讀取失敗再把它當(dāng)作文件路徑去讀,例如如果您設(shè)定/root/cfg/config.xml,本意是想加載文件路徑/root/cfg/下的文件config.xml,但是如果您的類路徑中有root.cfg這個(gè)包,并且包下同樣有config.xml這個(gè)文件,那么JDBMonitor會(huì)去讀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;
?}
}
不知道有沒有更好的辦法解決,請(qǐng)高手指教。有時(shí)間也去看看那些tomcat之類的服務(wù)器是怎么解決這個(gè)問題的。
JDBMonitor最強(qiáng)大的無侵入式數(shù)據(jù)庫監(jiān)控、日志工具。
COWNEW團(tuán)隊(duì),最專業(yè)的開源團(tuán)隊(duì)!官方網(wǎng)站: www.cownew.com