<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
獲取class檔案所在的具體目錄。
// TestGetResource.java // 當前包名為:com.loc //獲取當前class檔案所在位置,以URL形式返回 URL url = getClass().getResource(""); //輸出:file:/D:/dev/workspace/AnyTest/bin/com/loc/ System.out.println(url); //去除file:字首後剩下的部分:/D:/dev/workspace/AnyTest/bin/com/loc/ System.out.println(url.getPath());
傳入的/代表根目錄,用於獲取class檔案的根目錄(包名的起點)。
// TestGetResource.java // 當前包名為:com.loc //獲取class檔案根目錄位置 url = getClass().getResource("/"); //file:/D:/dev/workspace/AnyTest/bin/ System.out.println(url); ///D:/dev/workspace/AnyTest/bin/ System.out.println(url.getPath());
1.如果是普通java專案,獲取到的是class檔案的根目錄(包名起點)。
// TestGetResource.java // 當前包名為:com.loc //獲取class檔案根目錄位置 URL srcLocation = getClass().getProtectionDomain().getCodeSource().getLocation(); //輸出:file:/D:/dev/workspace/AnyTest/bin/ System.out.println(srcLocation); //輸出:/D:/dev/workspace/AnyTest/bin/ System.out.println(srcLocation.getPath());
2.如果是Web專案,獲取到的是class檔案的完整路徑,包含XXX.class檔名本身。
// TestGetResource.java // 當前包名為:com.loc //Web專案下,可用於獲取class檔案全路徑 URL srcLocation = getClass().getProtectionDomain().getCodeSource().getLocation(); //輸出:file:/D:/dev/.../WEB-INF/classes/com/loc/TestGetResource.class System.out.println(srcLocation); //輸出:/D:/dev/.../WEB-INF/classes/com/loc/TestGetResource.class System.out.println(srcLocation.getPath());
用JAVA獲取檔案,聽似簡單,但對於很多像我這樣的新人來說,還是掌握頗淺,用起來感覺頗深,大常最經常用的,就是用JAVA的File類,如要取得c:/test.txt檔案,就會這樣用File file = new File(“c:/test.txt”);這樣用有什麼問題,相信大家都知道,就是路徑寫死,對於JAVA精神來說,應用應該一次成型,到處可用,並且從現實應用來講,最終生成的應用也會部署到Windows外的作業系統中,對於linux來說,在應用中用了c:/這樣的字樣,就是失敗,所以,我們應該儘量避免使用寫死,即直接使用絕對路徑。
在Servlet應用中,有一個getRealPath(String str)的方法,這個方法儘管也可以動態地獲得檔案的路徑,不祕直接手寫絕對路徑,但這也是一個不被建議使用的方法,那麼,我們有什麼方法可以更好地獲得檔案呢?
那就是Class.getResource()與Class.getResourceAsStream()方法,但很多人還是不太懂它的用法,因為很多人(比如不久前的我)都不知道應該傳怎麼樣的引數給它,當然,有些人己經用得如火純青,這些人是不需要照顧的,在此僅給不會或者還不是很熟的人解釋一點點。
比如我們有以下目錄:
在上面的目錄中,有一個src目錄,這是JAVA原始檔的目錄,有一個build目錄,這是JAVA編譯後檔案(.class檔案等)的存放目錄
那麼,我們在Test類中應該如何分別獲得
file1.txt file2.txt file3.txt file4.txt這四個檔案呢?
首先講file3.txt與file4.txt:
方法一:File file3 = new File(Test.class.getResource(“file3.txt”).getFile());
方法二:File file3 = new File(Test.class.getResource(“/javaapplication/file3.txt”).getFile());
方法三:File file3 = new File(Test.class.getClassLoader().getResource(“javaapplication/file3.txt”).getFile());
方法一:File file4 = new File(Test.class.getResource(“/file4.txt”).getFile());
方法二:File file4 = new File(Test.class.getClassLoader().getResource(“file4.txt”).getFile());
很好,我們可以有多種方法選擇,但是file1與file2檔案呢?如何獲得?
答案是,你只能寫上它們的絕對路徑,不能像file3與file4一樣用class.getResource()這種方法獲得,它們的獲取方法如下
假如整個project目錄放在c:/下,那麼file1與file2的獲取方法分別為
方法一:File file1 = new File(“c:/project/src/javaapplication/file1.txt”);
方法二:。。。沒有
方法一:File file2 = new File(“c:/project/src/file2.txt”);
方法二:。。。也沒有
總結一下,就是你想獲得檔案,你得從最終生成的.class檔案為著手點,不要以.java檔案的路徑為出發點,因為真正使用的就是.class,不會拿個.java檔案就使用,因為java是編譯型語言嘛
至於getResouce()方法的引數,你以class為出發點,再結合相對路徑的概念,就可以準確地定位資原始檔了,至於它的根目錄嘛,你用不同的IDE build出來是不同的位置下的,不過都是以頂層package作為根目錄,比如在Web應用中,有一個WEB-INF的目錄,WEB-INF目錄裡面除了web.xml檔案外,還有一個classes目錄,沒錯了,它就是你這個WEB應用的package的頂層目錄,也是所有.class的根目錄“/”,假如clasaes目錄下面有一個file.txt檔案,它的相對路徑就是”/file.txt”,如果相對路徑不是以”/”開頭,那麼它就是相對於.class的路徑。。
還有一個getResourceAsStream()方法,引數是與getResouce()方法是一樣的,它相當於你用getResource()取得File檔案後,再new InputStream(file)一樣的結果
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45