在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. 接下來是獲取該類文件的路徑
String classFilePath = this.getClass().getResource(classFileName).toString();
3. 最後獲取父目錄的路徑
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+"相對路徑"+"文件名".