摘要:文件的部分代碼中獲取文件的生成對(duì)象獲取文件的絕對(duì)路徑值使用絕對(duì)路徑當(dāng)使用絕對(duì)路徑時(shí),必須是以開頭,這代表了當(dāng)前源代碼的根目錄。
獲取文件的絕對(duì)路徑,讀取該文件 一、文件目錄打印圖
下面的文件目錄圖,是項(xiàng)目中文件的位置信息;下面的例子是按照這個(gè)圖來演示的。
. |-- java | |-- ibard | | |-- demo1 | | | `-- DemoTest1.java | | `-- demo2 | | `-- DemoTest2.java `-- resources |-- demo0.properties `-- ibard |-- demo2 | `-- demo2.properties `-- demo3 `-- demo3.properties
項(xiàng)目打包發(fā)布后的目錄結(jié)構(gòu):(要注意的是,我們操作的文件狀態(tài)是下面這個(gè)目錄的情形!)
target |-- classes | |-- ibard | | |-- demo0.properties | | |-- demo1 | | | `-- DemoTest1.java | | `-- demo2 | | `-- DemoTest2.java | | | `-- demo2.properties | | |-- demo3 | | `-- demo3.properties二、properties文件介紹
以下內(nèi)容引自Wikipedia:
.properties 文件是一種和java相關(guān)的文件拓展,用于存儲(chǔ)配置信息。每個(gè)參數(shù)以一對(duì)字符串的信息存儲(chǔ),即key-value 對(duì)。
屬性信息的格式:
可以是:key=value 、key = value 、key:value 、key value 。
# 或! 用于注釋該行(當(dāng)其在屬性中時(shí),將不起作用), 用于轉(zhuǎn)義和拼接多行的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三、獲取文件路徑
注意: 這里我們講的獲取文件路徑和讀取文件,有一個(gè)最高級(jí)范圍的限定的前提。
在java項(xiàng)目和web項(xiàng)目中,其最高級(jí)的目錄只能是并行的java 目錄和resource 目錄。
因此,我們只能操作java 中的源代碼文件和resource 的資源文件。對(duì)于web項(xiàng)目來說,我們是無法通過這里講的方法來獲取webapp 目錄下的文件的。
我們想獲得的文件路徑,無非是兩種。一是java類文件的路徑(*.java ),二是資源文件的路徑(*.properties或其他資源文件)。通常情況下,我們主要是想獲取資源文件的路徑。
這里我們使用DemoTest2.java 類來獲取demo2.properties 和demo3.properties 這兩個(gè)文件的路徑。
說明: 下面所講的方法,其定位參照的方法都是借助.class 類文件來展開的(也就是第2個(gè)目錄結(jié)構(gòu)圖),因此其位置都是編譯后的文件位置(當(dāng)然,通常其位置和源代碼位置一致)。
我們所獲取的文件路徑,都是絕對(duì)路徑(相對(duì)于系統(tǒng)而言的全寫路徑)。比如windows下會(huì)是C:/user/ibard/desktop/....,linux下會(huì)是/opt/tomcat8/...這樣的物理絕對(duì)路徑。
1、URL <- Concrete.class.getResource(String path)方法在這里,path可以是相對(duì)路徑,也可以是絕對(duì)路徑(絕對(duì)路徑的path以/ 開頭,指向你程序的根目錄)。得到的結(jié)果是URL 類型。
1.1、path使用相對(duì)路徑當(dāng)使用相對(duì)路徑時(shí),其參照目錄是當(dāng)前類文件所在的目錄。當(dāng)path傳入的值為"" 時(shí),獲取的就是當(dāng)前目錄的路徑。
// DemoTest2.java文件的部分代碼 // 1.DemoTest2.java中獲取demo2.properties文件的URL URL url_1 = DemoTest2.class.getResource("demo2.properties"); // 2.生成File對(duì)象 File file_1 = new File(url_1.getFile()); // 3.獲取文件的絕對(duì)路徑值 String filepath_1 = file_1.toPath();1.2、path使用絕對(duì)路徑
當(dāng)使用絕對(duì)路徑時(shí),必須是以/ 開頭,這代表了當(dāng)前java源代碼的根目錄。當(dāng)path傳入的值為/ 時(shí),獲取的就是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();
當(dāng)要獲取的資源文件與當(dāng)前java類不在同一個(gè)包下時(shí),應(yīng)該使用絕對(duì)路徑的方式來獲取資源文件的絕對(duì)路徑,進(jìn)而來生成File對(duì)象操作文件。2、URL <- Concrete.class.getClassLoader().getResource(String path)方法
在這里,通過獲取類加載器來獲取資源文件的路徑。path只能是絕對(duì)路徑,而且該絕對(duì)路徑是不以/開頭的。其實(shí)介紹的第一種方法,其內(nèi)部源碼就是調(diào)用這種方法。
// 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();總結(jié)
上面介紹的2種方法都是用來獲取文件的File對(duì)象和絕對(duì)路徑。而File 對(duì)象在后面的資源文件的讀取中就會(huì)使用到。
四、讀取資源文件更多的時(shí)候,我們是要讀取資源文件內(nèi)部的信息。對(duì)于.properties 文件(一般是鍵值對(duì)的形式保存信息),在java 中有一個(gè)與其對(duì)應(yīng)的類,即Properties 類。通過構(gòu)造Properties 類,我們可以讀取資源的key 和value 。
1、 Properties對(duì)象讀取資源文件 1.1、生成properties 對(duì)象首先,我們需要生成Properties 對(duì)象:Properties properties= new Properties(); 。
1.2、獲取資源文件的輸入流然后,我們需要得到資源文件的輸入流,而得到輸入流的方法有兩種。
path可以是相對(duì)路徑,也可以是絕對(duì)路徑。
InputStream in = DemoTest2.class.getResourceAsStream("demo2.properties");
path只能是絕對(duì)路徑。但是絕對(duì)路徑卻不以/ 開頭,和之前相反了。
InputStream in = DemoTest2.class.getClassLoader().getResourceAsStream("ibard/demo3/demo3.properties");1.3、加載輸入流,獲取值
在得到輸入流之后,將輸入流加載到Properties 對(duì)象,之后就可以獲取值了。
// 加載輸入流對(duì)象 properties.load(in); String value = properties.getProperty("name");
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76436.html
摘要:當(dāng)使用節(jié)點(diǎn)流進(jìn)行輸入輸出時(shí),程序直接連接到實(shí)際的數(shù)據(jù)源,和時(shí)間的輸入輸出節(jié)點(diǎn)連接處理流則用于對(duì)一個(gè)已存在的流進(jìn)行連接或封裝,通過封裝后的流來實(shí)現(xiàn)數(shù)據(jù)讀寫功能,處理流也被稱為高級(jí)流。 文件的編碼 文本文件就是字節(jié)序列,可以是任意編碼形式。在中文操作系統(tǒng)上直接創(chuàng)建文本文件,則該文本文件只能識(shí)別ANSI編碼,其他編碼方式會(huì)產(chǎn)生亂碼 package imooc.io; import java...
摘要:在包下主要包括輸入輸出兩種流,每種輸入輸出流又可分為字節(jié)流和字符流兩大類。輸入輸出是從程序運(yùn)行所在的內(nèi)存的角度而言的。的輸入流主要由和作為基類,而輸出流主要由和作為基類。 本章主要參考和摘自瘋狂java講義上面的(java編程思想的后面看過后有新的內(nèi)容再補(bǔ)充進(jìn)去吧)?! ≥斎胼敵鍪撬谐绦蚨急匦璧牟糠帧褂幂斎霗C(jī)制允許程序讀取外部數(shù)據(jù)(包括磁盤、光盤等存儲(chǔ)設(shè)備上的數(shù)據(jù)和用戶輸入的...
摘要:也支持鎖定部分內(nèi)容,使用即可,其中為時(shí),表明該鎖是一個(gè)共享鎖,可以允許多個(gè)縣城讀取文件,但阻止其他進(jìn)程獲得該文件的排他鎖。當(dāng)為時(shí),表明是一個(gè)排他鎖,它將鎖住對(duì)該文件的讀寫。默認(rèn)獲取的是排他鎖。 Java的NIO BufferedReader有一個(gè)特征,就是讀取輸入流中的數(shù)據(jù)時(shí),如果沒有讀到有效數(shù)據(jù),程序?qū)⒃诖颂幾枞摼€程的執(zhí)行(使用InputStream的read方法從流中讀取數(shù)據(jù)時(shí),...
摘要:容器云架構(gòu)方案。容器云架構(gòu)方案基于容器技術(shù),運(yùn)維技術(shù)團(tuán)隊(duì)開發(fā)了五阿哥網(wǎng)站的容器云平臺(tái)。多云對(duì)接私有云和公有云進(jìn)行統(tǒng)一托管,包含網(wǎng)絡(luò)區(qū)域配置,實(shí)例開通及的環(huán)境初始化配置等。技術(shù)選型及實(shí)踐鏡像標(biāo)準(zhǔn)眾所周知,的鏡像是分層的。 前言 五阿哥鋼鐵電商平臺(tái)(www.wuage.com)是由鋼鐵行業(yè)第一的中國五礦與互聯(lián)網(wǎng)第一的阿里巴巴聯(lián)手打造,并充分運(yùn)用雙方股東優(yōu)勢資源,即:阿里巴巴在大數(shù)據(jù)、電商運(yùn)...
摘要:技術(shù)概述技術(shù)概述把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到持久化設(shè)備上這個(gè)動(dòng)作稱為輸出寫操作把持久設(shè)備上的數(shù)據(jù)讀取到內(nèi)存中的這個(gè)動(dòng)作稱為輸入讀操作操作把上面的這種輸入和輸出動(dòng)作稱為操作類的概述和作用類的概述和作用的概念類是文件和目錄路徑名的抽象表示形式中把文件或 01IO技術(shù)概述.avi(02:49) * A:IO技術(shù)概述 * a: Output * 把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到持久化設(shè)備上...
閱讀 1668·2021-11-23 10:07
閱讀 2664·2019-08-30 11:10
閱讀 2844·2019-08-29 17:08
閱讀 1787·2019-08-29 15:42
閱讀 3175·2019-08-29 12:57
閱讀 2402·2019-08-28 18:06
閱讀 3553·2019-08-27 10:56
閱讀 394·2019-08-26 11:33