国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java|基礎(chǔ)篇】File類和IO流

這篇具有很好參考價(jià)值的文章主要介紹了【Java|基礎(chǔ)篇】File類和IO流。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

1.File類

File類是Java中用于表示文件或目錄的類。它提供了一些方法來操作文件和目錄的屬性和內(nèi)容,可以進(jìn)行文件的創(chuàng)建、刪除、重命名等操作。

File類可以用于表示磁盤上的實(shí)際文件或目錄,也可以表示一個(gè)虛擬的文件或目錄。File對(duì)象可以通過路徑來創(chuàng)建,路徑可以是絕對(duì)路徑或相對(duì)路徑。

  • 絕對(duì)路徑(Absolute Path):絕對(duì)路徑是從文件系統(tǒng)的根目錄開始描述文件或目錄的位置。它包含了完整的路徑信息,從根目錄一直到目標(biāo)文件或目錄的全路徑。在Windows中,絕對(duì)路徑以盤符(例如C:\)開頭;在Unix/Linux系統(tǒng)中,絕對(duì)路徑以斜杠(/)開頭。

  • 相對(duì)路徑(Relative Path):相對(duì)路徑是相對(duì)于當(dāng)前工作目錄或引用文件所在位置的路徑。它指定文件或目錄相對(duì)于當(dāng)前位置的位置關(guān)系。相對(duì)路徑?jīng)]有從根目錄開始的完整路徑,而是通過使用“.”(當(dāng)前目錄)和“…”(上級(jí)目錄)等符號(hào)來描述位置關(guān)系。

創(chuàng)建File類對(duì)象:

File file = new File("文件路徑(絕對(duì)/相對(duì))");
// 此處的文件路徑不要要求一定存在

File類中的常用方法:

方法 描述
getParent() 獲取文件的父目錄
getName() 獲取文件的名字
getPath() 獲取文件的路徑
getAbsolutePath() 獲取絕對(duì)路徑
getCanonicalPath() 獲取標(biāo)準(zhǔn)的絕地路徑。
createNewFile() 創(chuàng)建文件
exists() 判斷文件是否存在
delete() 刪除文件
mkdir() 創(chuàng)建目錄(與src同一級(jí))
mkdirs() 創(chuàng)建多級(jí)目錄
isDirectory() 判斷是否為目錄
isFile() 是否為文件
renameTo(File dest) 重命名
list() 返回當(dāng)前目錄下所有文件名

上述都是一些獲取文件和目錄的信息以及增刪等操作. 接下來介紹一些文件的讀寫操作.

2.流的概念

在Java的IO操作中,流(Stream)是指數(shù)據(jù)的傳輸管道。它將程序與輸入/輸出設(shè)備(例如文件、網(wǎng)絡(luò)連接等)連接起來,使得數(shù)據(jù)能夠在程序和設(shè)備之間流動(dòng)。

Java的IO流分為輸入流和輸出流兩種類型。

  • 輸入流用于從外部讀取數(shù)據(jù)
  • 輸出流用于向外部寫入數(shù)據(jù)。

Java中的流操作按照字節(jié)或字符的方式進(jìn)行。字節(jié)流(byte stream)是以字節(jié)為單位進(jìn)行數(shù)據(jù)傳輸?shù)?,適用于處理二進(jìn)制數(shù)據(jù)。字符流(character stream)是以字符為單位進(jìn)行數(shù)據(jù)傳輸?shù)模m用于處理文本數(shù)據(jù)。

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

這里的InputStream,OutputStream,Reader和Writer都是抽象類.Java提供了一些實(shí)現(xiàn)這些抽象父類的子類,用于應(yīng)對(duì)不同的場(chǎng)景.

3.InputStream

InputStream的子類可以根據(jù)不同的數(shù)據(jù)源提供不同的實(shí)現(xiàn),例如FileInputStream用于從文件中讀取數(shù)據(jù),ByteArrayInputStream用于從字節(jié)數(shù)組中讀取數(shù)據(jù),SocketInputStream用于從網(wǎng)絡(luò)連接中讀取數(shù)據(jù)等。

對(duì)于InputStream,主要講解FileInputStream

    public static void main(String[] args) throws FileNotFoundException {
        InputStream inputStream = new FileInputStream("文件路徑");
       
        inputStream.close();
    }

在創(chuàng)建實(shí)例時(shí),要傳入一個(gè)文件路徑.這里需要處理一個(gè)異常FileNotFoundException(文件沒找到).

讀文件需要先打開文件,打開才能讀,讀完之后要關(guān)閉文件(close)

InputStream類的常用方法為read()和close()方法

close()方法:關(guān)閉輸入流,釋放與之關(guān)聯(lián)的資源。

而read()方法有三個(gè)版本:

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

  1. int read():從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié),并返回讀取到的字節(jié)值。如果已經(jīng)到達(dá)流的末尾,則返回-1。
  2. int read(byte[] b):從輸入流中最多讀取b.length個(gè)字節(jié),并將其存儲(chǔ)在字節(jié)數(shù)組b中。返回實(shí)際讀取的字節(jié)數(shù)量。如果已經(jīng)到達(dá)流的末尾,則返回-1
  3. int read(byte b[], int off, int len): 從輸入流中讀取最多l(xiāng)en個(gè)字節(jié),并將其存儲(chǔ)在從偏移量off開始的字節(jié)數(shù)組b中。

4.OutputStream

OutputStream的子類可以根據(jù)不同的目的地提供不同的實(shí)現(xiàn),例如FileOutputStream用于向文件中寫入數(shù)據(jù),ByteArrayOutputStream用于向字節(jié)數(shù)組中寫入數(shù)據(jù),SocketOutputStream用于向網(wǎng)絡(luò)連接中寫入數(shù)據(jù)等。

對(duì)于OutputStream,主要講解FileOutputStream

    public static void main(String[] args) throws IOException {
        OutputStream outputStream = new FileOutputStream("文件路徑");

        outputStream.close();
    }

close()方法: 關(guān)閉輸出流,釋放資源.

OutputStream中的一個(gè)常用方法: write():

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

這里有三個(gè)重載的版本

  1. write(int b):寫入一個(gè)字節(jié)到輸出流中。b是一個(gè)整數(shù),表示要寫入的字節(jié)的值(范圍是0~255)。
  2. write(byte[] b):將整個(gè)字節(jié)數(shù)組b寫入輸出流中。
  3. write(byte[] b, int off, int len):將字節(jié)數(shù)組b中從偏移量off開始的len個(gè)字節(jié)寫入輸出流中。

注意:使用OutputStream寫文件時(shí),只要文件打開成功,就會(huì)把文件原有的內(nèi)容清空.

5.Reader

Reader的子類可以根據(jù)不同的字符輸入源提供不同的實(shí)現(xiàn),例如FileReader用于從文件中讀取字符數(shù)據(jù),StringReader用于從字符串中讀取字符數(shù)據(jù),BufferedReader用于從字符緩沖區(qū)中讀取字符數(shù)據(jù)等。

使用方式于InputStream類似,只不過Reader是以字符流的形式進(jìn)行讀文件

public static void main(String[] args) throws IOException {
     Reader reader = new FileReader("");
     reader.close();
}

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

  1. read():讀取單個(gè)字符,并返回其Unicode值。如果已到達(dá)流的末尾,則返回-1。
  2. read(char[] cbuf):將字符讀入到指定的字符數(shù)組cbuf中,并返回讀取的字符數(shù)。
  3. read(char[] cbuf, int off, int len):將字符讀入到指定的字符數(shù)組cbuf中,從偏移量off開始,最多讀取len個(gè)字符,并返回實(shí)際讀取的字符數(shù)。
  4. read(CharBuffer target):將字符讀入到指定的CharBuffer對(duì)象中,并返回讀取的字符數(shù)。

6.Writer

Writer是用于向字符輸出流中寫入字符數(shù)據(jù)。

Writer的子類可以根據(jù)不同的字符輸出目的地提供不同的實(shí)現(xiàn),例如FileWriter用于向文件中寫入字符數(shù)據(jù),StringWriter用于向字符串中寫入字符數(shù)據(jù),BufferedWriter用于向字符緩沖區(qū)中寫入字符數(shù)據(jù)等。

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

  1. write(int c):將指定的字符寫入輸出流中。
  2. write(String str):將字符串寫入輸出流中。
  3. write(char[] cbuf):將字符數(shù)組中的字符寫入輸出流中。
  4. write(String str, int off, int len):將字符串中從偏移量off開始的len個(gè)字符寫入輸出流中。
  5. write(char[] cbuf, int off, int len):將字符數(shù)組中從偏移量off開始的len個(gè)字符寫入輸出流中。

7.使用Scanner讀文件

追對(duì)于文本文件,也可以使用Scanner進(jìn)行讀取

例如這里有一個(gè)test.txt文件
【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

接下來介紹使用Scanner進(jìn)行讀文件

public class Demo5 {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("test.txt");

        Scanner scanner = new Scanner(inputStream);
        while (scanner.hasNext()){
            System.out.println(scanner.next());
        }
        inputStream.close();
    }
}

運(yùn)行結(jié)果:

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言
解釋一下:InputStream是字節(jié)流,Scanner是在InputStream的基礎(chǔ)上,包裝出來的字符流.

8.使用PrintWriter寫文件

與Scanner進(jìn)行讀文件類似,通過將FileOutputStream對(duì)象作為參數(shù),創(chuàng)建了一個(gè)PrintWriter對(duì)象printWriter。

PrintWriter類提供了一系列的print和println方法,用于以友好的方式輸出數(shù)據(jù)。這些方法可以接受不同類型的數(shù)據(jù)作為參數(shù),并將其轉(zhuǎn)換為字符串并寫入輸出流中。

例如,常用的方法包括:

  1. print(boolean b) / println(boolean b):以字符串形式寫入一個(gè)boolean值。
  2. print(char c) / println(char c):以字符串形式寫入一個(gè)字符。
  3. print(int i) / println(int i):以字符串形式寫入一個(gè)整數(shù)。
  4. print(double d) / println(double d):以字符串形式寫入一個(gè)雙精度浮點(diǎn)數(shù)。
  5. print(String s) / println(String s):寫入一個(gè)字符串。
  6. printf(String format, Object… args):使用指定的格式字符串和參數(shù)進(jìn)行格式化輸出。

需要注意的是,在使用完P(guān)rintWriter后,需要調(diào)用close()方法關(guān)閉流,以確保數(shù)據(jù)被正確地寫入目的地并釋放資源。

代碼:

public class Demo6 {

    public static void main(String[] args) throws IOException {
        OutputStream outputStream = new FileOutputStream("test.txt");
        PrintWriter printWriter = new PrintWriter(outputStream);
        printWriter.printf("hello PrintWriter");
        printWriter.close();
        outputStream.close();
    }
}

運(yùn)行結(jié)果:
【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言

9.close()方法

上述輸入流和輸出流的讀文件和寫文件后,都要進(jìn)行close.是為什么呢?

原因是 每個(gè)進(jìn)程都對(duì)應(yīng)者PCB(可能是多個(gè)),PCB里有一個(gè)字段,文件描述符表(同一個(gè)進(jìn)程里有多個(gè)PCB共同使用同一份文件描述符表),進(jìn)程沒打開一個(gè)文件,就會(huì)在文件描述表中創(chuàng)建一個(gè)項(xiàng)表示 一個(gè)文件.關(guān)閉文件意味著釋放文件描述表中的項(xiàng).如果不關(guān)閉文件,表項(xiàng)就在這里占著位置. 如果持續(xù)打開文件,不關(guān)閉,文件描述符表中的項(xiàng)就會(huì)被耗盡,從而導(dǎo)致后續(xù)打開文件失敗. 這也稱"文件資源泄漏"

為了避免上述問題,就需要保證close方法一定能被執(zhí)行到.

因此就可以使用 try,finally保證close方法一定被執(zhí)行到

    public static void main(String[] args) throws IOException {
        Writer writer = null;
        try {
            writer = new FileWriter("文件路徑");
            
            // do something
        } finally {
            writer.close();
        }
        
    }

除了上述這種寫法,還有一種寫法(try with resources)

    public static void main(String[] args) throws IOException {
        try(Writer writer = new FileWriter("文件路徑")) {

            // do something
        }
    }

當(dāng)try中的代碼執(zhí)行結(jié)束,就會(huì)自動(dòng)調(diào)用對(duì)應(yīng)對(duì)象的close方法.而且()中可以放多個(gè)對(duì)象,對(duì)象之間用;進(jìn)行分割

10.flush()方法

flush()方法是Java IO流中的一個(gè)方法,用于刷新緩沖區(qū),并確保數(shù)據(jù)被寫入到目的地。

緩沖區(qū)(Buffer)是用于臨時(shí)存儲(chǔ)數(shù)據(jù)的一塊內(nèi)存區(qū)域,它可以提高IO操作的效率。
在Java的IO流中,使用緩沖區(qū)可以減少單次IO操作的次數(shù),從而提高讀取和寫入數(shù)據(jù)的效率。通常情況下,IO流會(huì)使用內(nèi)部的緩沖區(qū)來存儲(chǔ)數(shù)據(jù),然后在一定條件下將緩沖區(qū)中的數(shù)據(jù)進(jìn)行讀取或?qū)懭搿?/p>

在Java的輸出流(OutputStream/Writer)中,flush()方法的作用是將緩沖區(qū)中的數(shù)據(jù)強(qiáng)制刷新到目的地。通常情況下,輸出流會(huì)使用內(nèi)部的緩沖區(qū)來提高寫入效率,即將數(shù)據(jù)先寫入到緩沖區(qū)中,然后再一次性寫入到目的地。而flush()方法的調(diào)用可以讓輸出流立即將緩沖區(qū)的數(shù)據(jù)寫入到目的地,而不是等到緩沖區(qū)滿或流關(guān)閉時(shí)才寫入。

注: 調(diào)用close()方法也會(huì)刷新緩沖區(qū),并確保所有數(shù)據(jù)都被寫入

11.總結(jié)

Java IO流主要涉及以下類:

  • InputStream和OutputStream:字節(jié)流的基類,用于讀取和寫入字節(jié)數(shù)據(jù)。
  • Reader和Writer:字符流的基類,用于讀取和寫入字符數(shù)據(jù)。
  • FileInputStream和FileOutputStream:用于從文件中讀取和寫入字節(jié)數(shù)據(jù)。
  • FileReader和FileWriter:用于從文件中讀取和寫入字符數(shù)據(jù)。

同時(shí)可以使用Scanner和PrintWriter簡(jiǎn)化開發(fā),使用完流對(duì)象后,一定要記得調(diào)用close操作.

【Java|基礎(chǔ)篇】File類和IO流,從零開始的Java學(xué)習(xí)之旅,# JavaSE,java,python,開發(fā)語(yǔ)言文章來源地址http://www.zghlxwxcb.cn/news/detail-616064.html

到了這里,關(guān)于【Java|基礎(chǔ)篇】File類和IO流的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO字節(jié)流(三十)

    從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO字節(jié)流(三十)

    生活中,你肯定經(jīng)歷過這樣的場(chǎng)景。當(dāng)你編輯一個(gè)文本文件,忘記了 ctrl+s ,可能文件就白白編輯了。當(dāng)你電腦上插入一個(gè)U盤,可以把一個(gè)視頻,拷貝到你的電腦硬盤里。那么數(shù)據(jù)都是在哪些設(shè)備上的呢?鍵盤、內(nèi)存、硬盤、外接設(shè)備等等。 我們把這種數(shù)據(jù)的傳輸,可以看做

    2024年02月08日
    瀏覽(90)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之File類(二十九)

    java.io.File 類是文件和目錄路徑名的抽象表示,主要用于文件和目錄的創(chuàng)建、查找和刪除等操作。 public File(String pathname) :通過將給定的 路徑名字符串 轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實(shí)例。 public File(String parent, String child) :從 父路徑名字符串和子路徑名字符串 創(chuàng)建新的 F

    2024年02月08日
    瀏覽(18)
  • Java File類和IO流

    Java File類和IO流

    目錄 1. File類 1.1 File對(duì)象創(chuàng)建 1.2 File判斷和獲取方法 1.3 創(chuàng)建和刪除方法 1.4 遍歷文件夾 2. 字符集 2.1?ASCII字符集 2.2 GBK字符集 2.3 Unicode字符集 2.4 UTF-8 2.5 字符集小結(jié) 2.6 編碼和解碼 3. IO流(字節(jié)流) 3.1 IO流概述 3.2 FileInputStream 3.3 FileOutputStream? 3.4 FileReader 3.5 FileWriter 3.6 緩沖流

    2024年02月09日
    瀏覽(20)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO字符流(三十一)

    當(dāng)使用字節(jié)流讀取文本文件時(shí),可能會(huì)有一個(gè)小問題。就是遇到中文字符時(shí),可能不會(huì)顯示完整的字符,那是因?yàn)橐粋€(gè)中文字符可能占用多個(gè)字節(jié)存儲(chǔ)。所以Java提供一些字符流類,以字符為單位讀寫數(shù)據(jù),專門用于處理文本文件。 java.io.Reader 抽象類是表示用于讀取字符流的

    2024年02月08日
    瀏覽(88)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO緩沖流、轉(zhuǎn)換流(三十二)

    從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO緩沖流、轉(zhuǎn)換流(三十二)

    緩沖流,也叫高效流,是對(duì)4個(gè)基本的 FileXxx 流的增強(qiáng),所以也是4個(gè)流,按照數(shù)據(jù)類型分類: 字節(jié)緩沖流 : BufferedInputStream , BufferedOutputStream 字符緩沖流 : BufferedReader , BufferedWriter 緩沖流的基本原理,是在創(chuàng)建流對(duì)象時(shí),會(huì)創(chuàng)建一個(gè)內(nèi)置的默認(rèn)大小的緩沖區(qū)數(shù)組,通過緩沖

    2024年02月08日
    瀏覽(105)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO序列化、打印流、壓縮流(三十三)

    從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之IO序列化、打印流、壓縮流(三十三)

    Java 提供了一種對(duì)象 序列化 的機(jī)制。用一個(gè)字節(jié)序列可以表示一個(gè)對(duì)象,該字節(jié)序列包含該 對(duì)象的數(shù)據(jù) 、 對(duì)象的類型 和 對(duì)象中存儲(chǔ)的屬性 等信息。字節(jié)序列寫出到文件之后,相當(dāng)于文件中 持久保存 了一個(gè)對(duì)象的信息。 反之,該字節(jié)序列還可以從文件中讀取回來,重構(gòu)對(duì)

    2024年02月08日
    瀏覽(88)
  • JAVA基礎(chǔ)學(xué)習(xí)筆記-day15-File類與IO流

    JAVA基礎(chǔ)學(xué)習(xí)筆記-day15-File類與IO流

    博文主要是自己學(xué)習(xí)JAVA基礎(chǔ)中的筆記,供自己以后復(fù)習(xí)使用,參考的主要教程是B站的 尚硅谷宋紅康2023大數(shù)據(jù)教程 老驥伏櫪,志在千里 --曹操《龜雖壽》 1.1 概述 File類及本章下的各種流,都定義在 java.io 包下。 一個(gè)File對(duì)象代表硬盤或網(wǎng)絡(luò)中可能存在的一個(gè)文件或者文件目

    2024年01月21日
    瀏覽(22)
  • 初始Java篇(JavaSE基礎(chǔ)語(yǔ)法)(5)(類和對(duì)象(上))

    初始Java篇(JavaSE基礎(chǔ)語(yǔ)法)(5)(類和對(duì)象(上))

    個(gè)人主頁(yè)(找往期文章包括但不限于本期文章中不懂的知識(shí)點(diǎn)):我要學(xué)編程(?_?)-CSDN博客 目錄 面向?qū)ο蟮某醪秸J(rèn)知 面向?qū)ο笈c面向過程的區(qū)別 類的定義和使用? 類的定義格式 類的實(shí)例化 this引用 什么是this引用? this引用的特性 對(duì)象的構(gòu)造及初始化 如何初始化對(duì)象(的

    2024年04月08日
    瀏覽(25)
  • 【JavaSE】Java基礎(chǔ)語(yǔ)法(三十三):File 一文詳解

    【JavaSE】Java基礎(chǔ)語(yǔ)法(三十三):File 一文詳解

    File類介紹 它是文件和目錄路徑名的抽象表示 文件和目錄是可以通過File封裝成對(duì)象的 對(duì)于File而言,其封裝的并不是一個(gè)真正存在的文件,僅僅是一個(gè)路徑名而已.它可以是存在的,也 可以是不存在的.將來是要通過具體的操作把這個(gè)路徑的內(nèi)容轉(zhuǎn)換為具體存在的 File類的構(gòu)造方法

    2024年02月06日
    瀏覽(39)
  • 【Java 基礎(chǔ)】File & IO流

    【Java 基礎(chǔ)】File & IO流

    java.io.File類是文件和目錄路徑名的抽象表示形式,主要用于文件和目錄的創(chuàng)建、查找和刪除等操作。 File:它是文件和目錄路徑名的抽象表示 文件和目錄可以通過File封裝成對(duì)象 File封裝的對(duì)象僅僅是一個(gè)路徑名。它可以是存在的,也可以是不存在的。 | 方法名 | 說明 | | —

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包