摘要:文件的部分代碼中獲取文件的生成對象獲取文件的絕對路徑值使用絕對路徑當使用絕對路徑時,必須是以開頭,這代表了當前源代碼的根目錄。
獲取文件的絕對路徑,讀取該文件 一、文件目錄打印圖
下面的文件目錄圖,是項目中文件的位置信息;下面的例子是按照這個圖來演示的。
. |-- java | |-- ibard | | |-- demo1 | | | `-- DemoTest1.java | | `-- demo2 | | `-- DemoTest2.java `-- resources |-- demo0.properties `-- ibard |-- demo2 | `-- demo2.properties `-- demo3 `-- demo3.properties
項目打包發布后的目錄結構:(要注意的是,我們操作的文件狀態是下面這個目錄的情形!)
target |-- classes | |-- ibard | | |-- demo0.properties | | |-- demo1 | | | `-- DemoTest1.java | | `-- demo2 | | `-- DemoTest2.java | | | `-- demo2.properties | | |-- demo3 | | `-- demo3.properties二、properties文件介紹
以下內容引自Wikipedia:
.properties 文件是一種和java相關的文件拓展,用于存儲配置信息。每個參數以一對字符串的信息存儲,即key-value 對。
屬性信息的格式:
可以是:key=value 、key = value 、key:value 、key value 。
# 或! 用于注釋該行(當其在屬性中時,將不起作用), 用于轉義和拼接多行的value 。
wikipedia的properties文件模板:
# You are reading the ".properties" entry. ! The exclamation mark can also mark text as comments. # The key characters =, and : should be written with # a preceding backslash to ensure that they are properly loaded. # However, there is no need to precede the value characters =, and : by a backslash. website = https://en.wikipedia.org/ language = English # The backslash below tells the application to continue reading # the value onto the next line. message = Welcome to Wikipedia! # Add spaces to the key key with spaces = This is the value that could be looked up with the key "key with spaces". # Unicode tab : u0009 # If you want your property to include a backslash, it should be escaped by another backslash path=c:wiki emplates # However, some editors will handle this automatically三、獲取文件路徑
注意: 這里我們講的獲取文件路徑和讀取文件,有一個最高級范圍的限定的前提。
在java項目和web項目中,其最高級的目錄只能是并行的java 目錄和resource 目錄。
因此,我們只能操作java 中的源代碼文件和resource 的資源文件。對于web項目來說,我們是無法通過這里講的方法來獲取webapp 目錄下的文件的。
我們想獲得的文件路徑,無非是兩種。一是java類文件的路徑(*.java ),二是資源文件的路徑(*.properties或其他資源文件)。通常情況下,我們主要是想獲取資源文件的路徑。
這里我們使用DemoTest2.java 類來獲取demo2.properties 和demo3.properties 這兩個文件的路徑。
說明: 下面所講的方法,其定位參照的方法都是借助.class 類文件來展開的(也就是第2個目錄結構圖),因此其位置都是編譯后的文件位置(當然,通常其位置和源代碼位置一致)。
我們所獲取的文件路徑,都是絕對路徑(相對于系統而言的全寫路徑)。比如windows下會是C:/user/ibard/desktop/....,linux下會是/opt/tomcat8/...這樣的物理絕對路徑。
1、URL <- Concrete.class.getResource(String path)方法在這里,path可以是相對路徑,也可以是絕對路徑(絕對路徑的path以/ 開頭,指向你程序的根目錄)。得到的結果是URL 類型。
1.1、path使用相對路徑當使用相對路徑時,其參照目錄是當前類文件所在的目錄。當path傳入的值為"" 時,獲取的就是當前目錄的路徑。
// DemoTest2.java文件的部分代碼 // 1.DemoTest2.java中獲取demo2.properties文件的URL URL url_1 = DemoTest2.class.getResource("demo2.properties"); // 2.生成File對象 File file_1 = new File(url_1.getFile()); // 3.獲取文件的絕對路徑值 String filepath_1 = file_1.toPath();1.2、path使用絕對路徑
當使用絕對路徑時,必須是以/ 開頭,這代表了當前java源代碼的根目錄。當path傳入的值為/ 時,獲取的就是java源代碼的根目錄。
// DemoTest2.java文件的部分代碼 // 1.DemoTest2.java獲取demo3.properties文件的URL URL url_2 = DemoTest2.class.getResource("/ibard/demo3/demo3.properties"); File file_2 = new File(url_2.getFile()); String filepath_2 = file_2.toPath();
當要獲取的資源文件與當前java類不在同一個包下時,應該使用絕對路徑的方式來獲取資源文件的絕對路徑,進而來生成File對象操作文件。2、URL <- Concrete.class.getClassLoader().getResource(String path)方法
在這里,通過獲取類加載器來獲取資源文件的路徑。path只能是絕對路徑,而且該絕對路徑是不以/開頭的。其實介紹的第一種方法,其內部源碼就是調用這種方法。
// DemoTest2.java文件的部分代碼 // 1.DemoTest2.java獲取demo2.properties文件的URL URL url_3 = DemoTest2.class.getClassLoader().getResource("ibard/demo2/demo2.properties"); File file_3 = new File(url_3.getFile()); String filepath_3 = file_3.toPath();總結
上面介紹的2種方法都是用來獲取文件的File對象和絕對路徑。而File 對象在后面的資源文件的讀取中就會使用到。
四、讀取資源文件更多的時候,我們是要讀取資源文件內部的信息。對于.properties 文件(一般是鍵值對的形式保存信息),在java 中有一個與其對應的類,即Properties 類。通過構造Properties 類,我們可以讀取資源的key 和value 。
1、 Properties對象讀取資源文件 1.1、生成properties 對象首先,我們需要生成Properties 對象:Properties properties= new Properties(); 。
1.2、獲取資源文件的輸入流然后,我們需要得到資源文件的輸入流,而得到輸入流的方法有兩種。
path可以是相對路徑,也可以是絕對路徑。
InputStream in = DemoTest2.class.getResourceAsStream("demo2.properties");
path只能是絕對路徑。但是絕對路徑卻不以/ 開頭,和之前相反了。
InputStream in = DemoTest2.class.getClassLoader().getResourceAsStream("ibard/demo3/demo3.properties");1.3、加載輸入流,獲取值
在得到輸入流之后,將輸入流加載到Properties 對象,之后就可以獲取值了。
// 加載輸入流對象 properties.load(in); String value = properties.getProperty("name");
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76436.html
摘要:當使用節點流進行輸入輸出時,程序直接連接到實際的數據源,和時間的輸入輸出節點連接處理流則用于對一個已存在的流進行連接或封裝,通過封裝后的流來實現數據讀寫功能,處理流也被稱為高級流。 文件的編碼 文本文件就是字節序列,可以是任意編碼形式。在中文操作系統上直接創建文本文件,則該文本文件只能識別ANSI編碼,其他編碼方式會產生亂碼 package imooc.io; import java...
摘要:在包下主要包括輸入輸出兩種流,每種輸入輸出流又可分為字節流和字符流兩大類。輸入輸出是從程序運行所在的內存的角度而言的。的輸入流主要由和作為基類,而輸出流主要由和作為基類。 本章主要參考和摘自瘋狂java講義上面的(java編程思想的后面看過后有新的內容再補充進去吧)。 輸入輸出是所有程序都必需的部分————使用輸入機制允許程序讀取外部數據(包括磁盤、光盤等存儲設備上的數據和用戶輸入的...
摘要:容器云架構方案。容器云架構方案基于容器技術,運維技術團隊開發了五阿哥網站的容器云平臺。多云對接私有云和公有云進行統一托管,包含網絡區域配置,實例開通及的環境初始化配置等。技術選型及實踐鏡像標準眾所周知,的鏡像是分層的。 前言 五阿哥鋼鐵電商平臺(www.wuage.com)是由鋼鐵行業第一的中國五礦與互聯網第一的阿里巴巴聯手打造,并充分運用雙方股東優勢資源,即:阿里巴巴在大數據、電商運...
摘要:技術概述技術概述把內存中的數據存儲到持久化設備上這個動作稱為輸出寫操作把持久設備上的數據讀取到內存中的這個動作稱為輸入讀操作操作把上面的這種輸入和輸出動作稱為操作類的概述和作用類的概述和作用的概念類是文件和目錄路徑名的抽象表示形式中把文件或 01IO技術概述.avi(02:49) * A:IO技術概述 * a: Output * 把內存中的數據存儲到持久化設備上...
閱讀 1667·2021-11-23 10:07
閱讀 2661·2019-08-30 11:10
閱讀 2842·2019-08-29 17:08
閱讀 1785·2019-08-29 15:42
閱讀 3170·2019-08-29 12:57
閱讀 2401·2019-08-28 18:06
閱讀 3552·2019-08-27 10:56
閱讀 391·2019-08-26 11:33