JavaBean訪問本地文件實現路徑無關

    在JSP中,頁面鏈接是使用web路徑的,但如果JavaBean要訪問本地文件讀取配置信息的話,是需要文件的本地路徑的。如果你在寫Bean的時候直接將本地路徑寫進去,那網站的路徑就不能變化,喪失可移植性。也許有人說可以將路徑寫入配置文件中,我是新手,不清楚配置文件的讀取機制。在網上搜索的時候,發現很多新手也有同樣的問題,Bean訪問本地文件需要本地的絕對路徑。下面就提供一個比較笨的方法,實現網站文件讀取的路徑無關,如果各位技術屆大佬有好的方法和技術的話,回帖裏給我們這些新手點幫助,小第在此謝過。
 
    本人剛剛本科畢業,畢業設計是用JSP來做的一個項目,該項目中需要訪問本地的一些文件,我們當然可以直接寫絕對路徑,但答辯調試的話,如果web服務器安裝的路徑和你的不一樣的話,就不可能調試成功,動手改程序就顯得太低能了。所以,要做到路徑無關,把整個網站文件夾拷到web服務器目錄中就能直接運行纔是硬道理。廢話少說,切入正題。
 
    JSP網站中,配置文件,JavaBean,其它文件,都是存儲在WEB-INF文件夾中的。
 
    我們可以將獲取文件父目錄的代碼放到構造函數裏,這樣在實例化類的時候就獲取了文件父目錄的路徑,需要訪問文件時,就可以直接在該路徑後面加上文件的相對路徑。
 
    1.  獲取當前類編譯後的文件名(xxxxx.class)
           首先用getClass()方法獲取該類的類型,然後調用getName()方法獲取類名。如果你的類名叫MyClass,該類屬於bean包,那麼this.getClass().getName()的結果就是bean.MyClass。而這個類編譯後,應該叫MyClass.class,所以,我們必須剪掉包名和那個點。這時需要用到getPackage()獲取包類型,然後用getName()獲取包名。這樣就是:
 this.getClass().getPackage().getName().然後用String的subString()方法就可以獲得文件名了。
                String className = this.getClass().getName();
                String packageName = this.getClass().getPackage().getName();
                String classFileName = className.subString(packageName.length()+1)+".class";
            這3行代碼下來,就取得了類的文件名:MyClass.class
    2.  接下來是獲取該類文件的路徑
            這裏要用到getResource()方法,該方法是獲取類文件的路徑。該方法返回的是URI類型的,我們要轉化成String類型,結果爲“file:///D:/TomCat/......”格式的。
                String classFilePath = this.getClass().getResource(classFileName).toString();
    3.  最後獲取父目錄的路徑
           前面已經說了,我們的文件一般是放在WEB-INF文件夾下的,而JavaBean的類文件放在WEB-INF/classes/下,而我們的classFilePath的結果爲file:///D:/.../WEB-INF/classes/bean/MyClass.class,我們需要把WEB-INF後面的內容去掉,同樣用subString()方法。
             String filePath = classFilePath.subString(0,classFilePath.length()-className.length()-14));
          className的值是bean.MyClass,"classes/"+".class"共14個字符,這條語句下來,就是父目錄的路徑了,結果爲"file:///D:/.../WEB-INF/"。這個目錄不能直接拿來用,結果也是windows上的路徑,在UNIX,LINUX中就不同了,照顧到平臺無關性,我們需要這樣做:
          URI uri = URI(filePath+"文件相對路徑");
          File file1 = File(uri);
     好了,這樣就做到了路徑無關,把代碼整理放下面,方便查看。同時也請各位高手不吝賜教哈。
 
String className = this.getClass().getName();
String packageName = this.getClass().getPackage().getName();
String classFileName = className.subString(packageName.length()+1)+".class";
String classFilePath = this.getClass().getResource(classFileName).toString();
String filePath = classFilePath.subString(0,classFilePath.length()-className.length()-14));
filePath爲父目錄,用的時候filePath+"相對路徑"+"文件名".
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章