国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java中的獲取文件的物理絕對路徑,和讀取文件

dreambei / 2614人閱讀

摘要:文件的部分代碼中獲取文件的生成對象獲取文件的絕對路徑值使用絕對路徑當使用絕對路徑時,必須是以開頭,這代表了當前源代碼的根目錄。

獲取文件的絕對路徑,讀取該文件 一、文件目錄打印圖

下面的文件目錄圖,是項目中文件的位置信息;下面的例子是按照這個圖來演示的。

.
|-- 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=valuekey = valuekey:valuekey 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.propertiesdemo3.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 類,我們可以讀取資源的keyvalue

1、 Properties對象讀取資源文件 1.1、生成properties 對象

首先,我們需要生成Properties 對象:Properties properties= new Properties();

1.2、獲取資源文件的輸入流

然后,我們需要得到資源文件的輸入流,而得到輸入流的方法有兩種。

1.2.1、Concrete.class.getResourceAsStream(String path)

path可以是相對路徑,也可以是絕對路徑。

InputStream in = DemoTest2.class.getResourceAsStream("demo2.properties");
1.2.2、Concrete.class.getClassLoader().getResourceAsStream(String path)

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

相關文章

  • Java 輸入/輸出 I/O流 RandomAccessFile

    摘要:當使用節點流進行輸入輸出時,程序直接連接到實際的數據源,和時間的輸入輸出節點連接處理流則用于對一個已存在的流進行連接或封裝,通過封裝后的流來實現數據讀寫功能,處理流也被稱為高級流。 文件的編碼 文本文件就是字節序列,可以是任意編碼形式。在中文操作系統上直接創建文本文件,則該文本文件只能識別ANSI編碼,其他編碼方式會產生亂碼 package imooc.io; import java...

    Eirunye 評論0 收藏0
  • 第十五章 輸入輸出系統

    摘要:在包下主要包括輸入輸出兩種流,每種輸入輸出流又可分為字節流和字符流兩大類。輸入輸出是從程序運行所在的內存的角度而言的。的輸入流主要由和作為基類,而輸出流主要由和作為基類。 本章主要參考和摘自瘋狂java講義上面的(java編程思想的后面看過后有新的內容再補充進去吧)。  輸入輸出是所有程序都必需的部分————使用輸入機制允許程序讀取外部數據(包括磁盤、光盤等存儲設備上的數據和用戶輸入的...

    hankkin 評論0 收藏0
  • JavaNIO

    摘要:也支持鎖定部分內容,使用即可,其中為時,表明該鎖是一個共享鎖,可以允許多個縣城讀取文件,但阻止其他進程獲得該文件的排他鎖。當為時,表明是一個排他鎖,它將鎖住對該文件的讀寫。默認獲取的是排他鎖。 Java的NIO BufferedReader有一個特征,就是讀取輸入流中的數據時,如果沒有讀到有效數據,程序將在此處阻塞該線程的執行(使用InputStream的read方法從流中讀取數據時,...

    mrcode 評論0 收藏0
  • 五阿哥鋼鐵電商平臺Docker容器云平臺建設實踐——你想知道都在這里!

    摘要:容器云架構方案。容器云架構方案基于容器技術,運維技術團隊開發了五阿哥網站的容器云平臺。多云對接私有云和公有云進行統一托管,包含網絡區域配置,實例開通及的環境初始化配置等。技術選型及實踐鏡像標準眾所周知,的鏡像是分層的。 前言 五阿哥鋼鐵電商平臺(www.wuage.com)是由鋼鐵行業第一的中國五礦與互聯網第一的阿里巴巴聯手打造,并充分運用雙方股東優勢資源,即:阿里巴巴在大數據、電商運...

    jeffrey_up 評論0 收藏0
  • 1、File 2、遞歸

    摘要:技術概述技術概述把內存中的數據存儲到持久化設備上這個動作稱為輸出寫操作把持久設備上的數據讀取到內存中的這個動作稱為輸入讀操作操作把上面的這種輸入和輸出動作稱為操作類的概述和作用類的概述和作用的概念類是文件和目錄路徑名的抽象表示形式中把文件或 01IO技術概述.avi(02:49) * A:IO技術概述 * a: Output * 把內存中的數據存儲到持久化設備上...

    Code4App 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<