❶ 還沒搞懂java中的路徑看完這篇文章你就全懂了
之前對於Java中的路徑一直感到模糊不清,雖然知道一些,但實際操作時還是會遇到很多問題。每次遇到FileNotFound錯誤時,都會去搜索解決方案,比如相對路徑是從哪裡開始的,如何使用某個方法等。其實這就是一種盲目的編程方式。這次我決心一次性搞懂Java中的路徑問題,以便在未來的編程中更加得心應手。
「絕對路徑:」絕對路徑的英文全稱是Absolute Path,指的是真實的路徑,是計算機中的完整路徑,必須准確無誤。它以系統的根目錄為起點,即各個盤符。
「相對路徑:」相對路徑是相對於目標文件位置的路徑。但相對路徑的相對性很重要,它可以是項目的根目錄或classpath目錄。下面通過一個例子來說明絕對路徑和相對路徑的區別。
假設JavaIO模塊下的resource目錄下的a.txt文件,它的絕對路徑和相對路徑如下:
「絕對路徑:」D:\code\River\JavaSE\javaIO\src\main\resources\a.txt
「相對路徑:」相對於項目的根路徑是:classpath(也就是「target/classes」)
在project中,相對路徑的根目錄是project的根文件夾。創建文件的寫法如下:
「相對路徑:」D:\code\River\JavaSE(也就是工程的相對路徑),注意路徑不能以"/"開頭
「絕對路徑:」
在Java開發中,我們經常需要獲取文件內容。通常使用File類來獲取,例如:獲取「c:\文件.txt」時,我們需要創建一個File對象:File file = new File("c:\文件.txt")。然後使用file類創建一個文件輸入流:FileInputStream in = new FileInputStream(file),再使用該輸入流進行操作。但這樣有一個缺點,就是文件路徑是硬編碼的形式,在Java編碼過程中我們不推薦這種寫法。
當然,在web項目中,我們可以通過application對象的getRealPath(「文件名」)方式獲取文件的絕對路徑,但這也不是很推薦。因此,我們可以使用class.getResource(path)和class.getClassLoader(path)方法來獲取文件資源。下面我們來研究一下兩者的區別:
4.1 class.getResource(path)
其中的參數path有兩種形式,一種是以「/」開頭的,另一種是不以"/"開頭。
輸出的結果為:
假設現在的項目結構如下所示,針對下面的三種情況如何獲取:
獲取上圖所示的三種文件的方法:
輸出的結果為:
class.getResource()和class.getResourceAsStream()方式的使用在路徑上是一致的。
4.2 Class.getClassLoader().getResource(String path)
該方法中的參數path不能以「/」開頭,path表示的是從classpath下獲取資源的。
輸出結果:
五、總結
❷ Java工程師以後發展路徑是什麼
主要有這么幾個方面抄:
1.技術經理: 專注於技術的實現
2.產品經理: 專注於產品的設計
3.項目經理:技術 + 產品, 對整個項目負責, 管理團隊, 推進項目的進展
4.架構師: 技術經理的更高一級, 為整個系統設計框架
❸ 為什麼我的Mac下java的路徑/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"這個是JRE的運行路徑,
"/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home"這個是JDK的運行路徑。
關於JRE和JDK請參考以下資料
JRE:(Java Runtime Environment),java運行環境。包括Java虛擬機(JVM Java Virtual Machine)和Java程序所需的核心類庫等,如果想要運行一個開發好的Java程序,計算機中只需要安裝JRE 即可。
JDK:(Java Development Kit Java)開發工具包。JDK是提供給Java開發人員使用的,其中包含了java的開發工具,也包括了JRE。所以安裝了JDK,就不用在單獨安裝JRE了。
❹ java里絕對路徑和相對路徑的區別
按照jdk Doc上的說法」絕對路徑名是完整的路徑名,不需要任何其他信息就可以定位自身表示的文件。相反,相對路徑名必須使用來自其他路徑名的信息進行解釋。默認情況下,java.io 包中的類總是根據當前用戶目錄來分析相對路徑名。此目錄由系統屬性 user.dir 指定,通常是 Java 虛擬機的調用目錄.」
相對路徑顧名思義,相對於某個路徑,那麼究竟相對於什麼路徑我們必須弄明白.按照上面jdk文檔上講的這個路徑是」當前用戶目錄」也就是」java虛擬機的調用目錄」.更明白的說這個路徑其實是我們在哪裡調用jvm的路徑.舉個例子:
假設有一java源文件Example.java在d盤根目錄下,該文件不含package信息.我們進入命令行窗口,然後使用」d:」命令切換到d盤根目錄下,然後用」javac Example.java」來編譯此文件,編譯無錯後,會在d盤根目錄下自動生成」Example.class」文件.我們在調用」java Example」來運行該程序.此時我們已經啟動了一個jvm,這個jvm是在d盤根目錄下被啟動的,所以此jvm所載入的程序中File類的相對路徑也就是相對這個路徑的,即d盤根目錄:D:/.同時」 當前用戶目錄」也是D:/.在System.getProperty(「user.dir」);系統變數」user.dir」存放的也是這個值.
我們可以多做幾次試驗,把」Example.class」移動到不同路徑下,同時在那些路徑下,執行」java Example」命令啟動jvm,我們會發現這個」當前用戶目錄」是不斷變化的,它的路徑始終和我們在哪啟動jvm的路徑是一致的.
搞清了這些,我們可以使用相對路徑來創建文件,例如:
File file = new File(「a.txt」);
File.createNewFile();
假設jvm是在」D:/」下啟動的,那麼a.txt就會生成在D:/a.txt;
此外,這個參數還可以使用一些常用的路徑表示方法,例如」.」或」./」代表當前目錄,這個目錄也就是jvm啟動路徑.所以如下代碼能得到當前目錄完整路徑:
File f = new File(「.」);
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);//D:/
最後要說說在eclipse中的情況:
Eclipse中啟動jvm都是在項目根路徑上啟動的.比如有個項目名為blog,其完整路徑為:D:/work/IDE/workspace/blog.那麼這個路徑就是jvm的啟動路徑了.所以以上代碼如果在eclipse里運行,則輸出結果為」 D:/work/IDE/workspace/blog.」
Tomcat中的情況.
如果在tomcat中運行web應用,此時,如果我們在某個類中使用如下代碼:
File f = new File(「.」);
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);
那麼輸出的將是tomcat下的bin目錄.我的機器就是」 D:/work/server/jakarta-tomcat-5.0.28/bin/.」,由此可以看出tomcat伺服器是在bin目錄下啟動jvm的.其實是在bin目錄下的」 catalina.bat」文件中啟動jvm的.