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

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法

這篇具有很好參考價值的文章主要介紹了【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

目錄

1. File 概述

1.1 File的屬性

1.2 File的構(gòu)造方法

1.3 File的方法

2.讀文件

2.1 InputStream 概述

2.2 FileInputStream 概述

2.3 正確打開和關(guān)閉文件的方式

2.4 不同方式讀取文件代碼示例

2.4 另一種方法:利用?Scanner 進(jìn)行字符讀取

3.寫文件

3.1 OutputStream 概述

3.2?利用 OutputStreamWriter 進(jìn)行字符寫入

4. 讀文件和寫文件的其他方式: Reader 和 Writer?

4.1 Reader 讀取文件

4.2 Writer 寫文件


1. File 概述

Java 中通過 java.io.File 類來對?個文件(包括目錄)進(jìn)行抽象的描述。注意,有 File 對象, 并不代表真實存在該文件。

我們先來看看 File 類中的常見屬性、構(gòu)造方法和方法:

1.1 File的屬性

修飾符及類型 屬性 說明
static String pathSeparator 依賴于系統(tǒng)的路徑分隔符,String 類型的表示
static char pathSeparator 依賴于系統(tǒng)的路徑分隔符,char 類 型的表示

1.2 File的構(gòu)造方法

簽名 說明
File(File parent, String child) 根據(jù)父目錄 + 孩子文件路徑,創(chuàng)建?個新的 File 實例
File(String pathname) 根據(jù)文件路徑創(chuàng)建?個新的 File 實例,路徑可以是絕對路徑或者相對路徑
File(String parent, String child) 根據(jù)父目錄 + 孩子文件路徑,創(chuàng)建?個新的 File 實 例,父目錄用路徑表示

其中 File(String pathname) 使用的最多,下面是使用實例:

File f1 = new File("C:/Users/1/test.txt");
File f2 = new File("./test.txt");

1.3 File的方法

修飾符及返回值類型 方法簽名 說明
String getParent() 返回 File 對象的父目錄文件路徑
String getName() 返回 FIle 對象的純文件名稱
String getPath() 返回 File 對象的文件路徑
String getAbsolutePath() 返回 File 對象的絕對路徑
String getCanonicalPath() 返回 File 對象的修飾過的絕對路徑
boolean exists() 判斷 File 對象描述的文件是否真實存在
boolean isDirectory() 判斷 File 對象代表的文件是否是?個目錄
boolean isFile() 判斷 File 對象代表的文件是否是?個普通文件
boolean createNewFile() 根據(jù) File 對象,?動創(chuàng)建?個空文 件。成功創(chuàng)建后返回 true
boolean delete() 根據(jù) File 對象,刪除該文件。成功 刪除后返回 true
void deleteOnExit() 根據(jù) File 對象,標(biāo)注文件將被刪 除,刪除動作會到 JVM 運(yùn)行結(jié)束時 才會進(jìn)行
String[] list() 返回 File 對象代表的目錄下的所有文件名
File[] listFiles() 返回 File 對象代表的目錄下的所有文件,以 File 對象表示
boolean mkdir() 創(chuàng)建 File 對象代表的目錄
boolean mkdirs() 創(chuàng)建 File 對象代表的目錄,如果必 要,會創(chuàng)建中間目錄
boolean renameTo(File dest) 進(jìn)行文件改名,也可以視為我們平時的剪切、粘貼操作
boolean canRead() 判斷用戶是否對文件有可讀權(quán)限
boolean canWrite() 判斷用戶是否對文件有可寫權(quán)限

使用示例

getParent(),getName(),getPath(),getAbsolutePath(),getCanonicalPath()

public static void main(String[] args) throws IOException {
        File f = new File("C:/Users/1/test.txt");
        //File f = new File("./test.txt");
        System.out.println(f.getParent());
        System.out.println(f.getName());
        System.out.println(f.getPath());
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getCanonicalPath());
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

exists(),isDirectory(),isFile(),createNewFile()

createNewFile():?根據(jù) File 對象,自動創(chuàng)建?個空文件。成功創(chuàng)建后返回 true

public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());

        boolean ret = file.createNewFile();
        System.out.println("ret = " + ret);

        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

?

delete(),deleteOnExit()

delete():根據(jù) File 對象,刪除該文件。成功刪除后返回 true

public static void main(String[] args) throws InterruptedException {
        File file = new File("./test.txt");
        boolean ret = file.delete();
        System.out.println("ret = " + ret);
    }

deleteOnExit():根據(jù) File 對象,標(biāo)注文件將被刪除,刪除動作會到 JVM 運(yùn)?結(jié)束時才會進(jìn)行

public static void main(String[] args) throws InterruptedException {
        File file = new File("./test.txt");      
        //等程序結(jié)束后再刪除文件
        file.deleteOnExit();
        Thread.sleep(3000);
    }

list(),listFiles()

list():返回 File 對象代表的目錄下的所有文件名

public static void main(String[] args) {
        File file = new File(".");
        String[] files = file.list();
        System.out.println(Arrays.toString(files));
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

listFiles():返回 File 對象代表的目錄下的所有?件,以 File 對象表?

public static void main(String[] args) {
        File file = new File(".");
        File[] files = file.listFiles();
        System.out.println(Arrays.toString(files));
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

mkdir():創(chuàng)建 File 對象代表的目錄

public static void main(String[] args) {
        File f = new File("./aaa");
        //需要在構(gòu)造方法中把路徑創(chuàng)建好,再通過mkdir來創(chuàng)建
        boolean ret = f.mkdir();
        //boolean ret = f.mkdirs(); //創(chuàng)建多級目錄
        System.out.println(ret);
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

mkdirs():創(chuàng)建 File 對象代表的目錄,如果必要,會創(chuàng)建中間目

public static void main(String[] args) {
        File f = new File("./aaa/bbb/ccc");
        //需要在構(gòu)造方法中把路徑創(chuàng)建好,再通過mkdir來創(chuàng)建
        boolean ret = f.mkdirs(); //創(chuàng)建多級目錄
        System.out.println(ret);
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

renameTo(File dest):進(jìn)行文件改名,也可以視為我們平時的剪切、粘貼操作

修改文件名:

public static void main(String[] args) {
        File src = new File("./test.txt");
        File dest = new File("./test2.txt");
        boolean ret = src.renameTo(dest);//重命名和移動目錄
        System.out.println(ret);
    }

修改路徑:

public static void main(String[] args) {
        File src = new File("./test2.txt");
        File dest = new File("./aaa/test2.txt");
        boolean ret = src.renameTo(dest);//重命名和移動目錄
        System.out.println(ret);
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

2.讀文件

2.1 InputStream 概述

方法

修飾符及返回值類型 方法簽名 說明
int read() 讀取?個字節(jié)的數(shù)據(jù),返回 -1 代表已經(jīng)完全讀完了
int read(byte[] b) 最多讀取 b.length 字節(jié)的數(shù)據(jù)到 b 中,返回實際讀到的數(shù)量;-1 代表已經(jīng)讀完了
int read(byte[] b, int off, int len) 最多讀取 len - off 字節(jié)的數(shù)據(jù)到 b 中,從 off 開始,返回實際讀到的數(shù)量;-1 代表已經(jīng)讀完了
void close() 關(guān)閉字節(jié)流

byte[] b 是一個輸出型參數(shù), 會將文件的內(nèi)容讀取到b數(shù)組中,單位是字節(jié).?

說明

InputStream 只是?個抽象類,要使?還需要具體的實現(xiàn)類。關(guān)于 InputStream 的實現(xiàn)類有很多,基本可以認(rèn)為不同的輸入設(shè)備都可以對應(yīng)?個 InputStream 類,我們現(xiàn)在只關(guān)心從文件中讀取,所以使用?FileInputStream

2.2 FileInputStream 概述

構(gòu)造方法

簽名 說明
FileInputStream(File file) 利? File 構(gòu)造文件輸?流
FileInputStream(String name) 利?文件路徑構(gòu)造文件輸?流

2.3 正確打開和關(guān)閉文件的方式

不建議使用下面這種方式來關(guān)閉文件:

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

因為在文件操作的執(zhí)行過程中, 程序可能會在中途退出, 如遇到 return, 或者拋出異常未正確處理等, 會導(dǎo)致文件無法正常關(guān)閉, 造成文件資源泄露.

文件資源泄露:在java PCB中有文件描述符表, 記錄了當(dāng)前進(jìn)程都打開了哪些文件, 每次打開一個文件, 都是需要在文件描述符表中占據(jù)一個位置, 如果不關(guān)閉還一直打開其他文件, 就會導(dǎo)致文件描述符表被耗盡(文件描述符表長度有上限). 當(dāng)文件描述符表被耗盡后, 后續(xù)再打開文件就會打開失敗, 就會一起后續(xù)一系列的邏輯出現(xiàn)問題.

下面是建議使用的文件關(guān)閉方法:

1.使用finally

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

在javaSE中提到過finally的一個知識點(diǎn):

        try {
            // 可能會發(fā)生異常的代碼
        } catch (Exception e) {
            // 異常處理
        } finally {
            // 無論是否發(fā)生異常,都會執(zhí)行的代碼
        }

2. 使用java中提供的"try-with-resources"語句

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

Java中提供了"try-with-resources"語句,用于自動關(guān)閉實現(xiàn)了"AutoCloseable"接口的資源,無需顯式調(diào)用close()方法來關(guān)閉資源。這個語句可以在代碼塊結(jié)束后自動關(guān)閉資源,無論代碼塊是正常執(zhí)行完畢還是發(fā)生了異常。

?

2.4 不同方式讀取文件代碼示例

1.每次讀取一個字節(jié), 以16進(jìn)制輸出:

public static void main(String[] args) throws IOException{
        try(InputStream inputStream = new FileInputStream("./test.txt")) {
            //進(jìn)行文件操作
            while(true) {
                int n = inputStream.read();
                if(n == -1) {
                    //文件讀取完畢
                    break;
                }
                //打印這個字節(jié)的數(shù)據(jù)
                System.out.printf("%x ",n);
            }
        }
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

?

2.一次讀取若干個字節(jié),以String字符串的形式輸出:

public static void main(String[] args) throws IOException{
        try(InputStream inputStream = new FileInputStream("./test.txt")) {
            //進(jìn)行文件操作
            while(true) {
                byte[] buffer = new byte[1024];
                int n = inputStream.read(buffer);
                if(n == -1) {
                    //文件讀取完畢
                    break;
                }
                //打印這個字節(jié)的數(shù)據(jù)
                String s = new String(buffer,0,n);
                System.out.print(s);
            }
        }
    }

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

2.4 另一種方法:利用?Scanner 進(jìn)行字符讀取

上述例子中,我們看到了對字符類型直接使用?InputStream 進(jìn)行讀取是非常麻煩且困難的,所以,我們使用一種我們之前比較熟悉的類來完成該工作,就是 Scanner 類。

public static void main(String[] args) {
        try(InputStream inputStream = new FileInputStream(",/test.txt")) {
            Scanner scanner = new Scanner(inputStream);
            while(scanner.hasNext()) {
                String s = scanner.next();
                System.out.println(s);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

3.寫文件

3.1 OutputStream 概述

方法

返回值類型

?法簽名 說明
void write(int b) 寫入一個字節(jié)的數(shù)據(jù)
void write(byte[] b) 將 b 這個字符數(shù)組中的數(shù)據(jù)全部寫入 os 中
int write(byte[] b, int off, int len) 將 b 這個字符數(shù)組中從 off 開始的數(shù)據(jù)寫入 os 中,?共寫 len 個
void close() 關(guān)閉字節(jié)流
void flush() 見下面

flush()重要:我們知道 I/O 的速度是很慢的,所以,大多的 OutputStream 為了減少設(shè)備操作的次數(shù),在寫數(shù)據(jù)的時候都會將數(shù)據(jù)先暫時寫入內(nèi)存的?個指定區(qū)域里,直到該區(qū)域滿了或者其他指定條件時才真正將數(shù)據(jù)寫入設(shè)備中,這個區(qū)域?般稱為緩沖區(qū)。但造成?個結(jié)果,就是我們寫的數(shù)據(jù),很可能會遺留?部分在緩沖區(qū)中。需要在最后或者合適的位置,調(diào)用?flush(刷新)操作,將數(shù)據(jù)刷到設(shè)備中.

說明

OutputStream 同樣只是?個抽象類,要使?還需要具體的實現(xiàn)類。我們現(xiàn)在還是只關(guān)心寫入文件 中,所以使? FileOutputStream

3.2?利用 OutputStreamWriter 進(jìn)行字符寫入

public static void main(String[] args) {
        //使用OutPutStream來寫文件
        try(OutputStream outputStream = new FileOutputStream("./test.txt")) {
            byte[] buffer = new byte[]{97,98,99,100,101,102};
            outputStream.write(buffer);
            // 不要忘記 flush
            outputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } ;
    }

?文件中得到的結(jié)果:

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

注意:?

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

如果要以追加的形式寫文件,需要在FileOutputStream的構(gòu)造方法中加true參數(shù):

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

寫入英文字符串

public static void main(String[] args) {
        //使用OutPutStream來寫文件
        try(OutputStream outputStream = new FileOutputStream("./test.txt")) {
            String s = "Nothing";
            byte[] buffer = s.getBytes();
            outputStream.write(buffer);
            // 不要忘記 flush
            outputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } 
    }

寫入中文字符串

public static void main(String[] args) {
        //使用OutPutStream來寫文件
        try(OutputStream outputStream = new FileOutputStream("./test.txt")) {
            String s = "你好中國";
            byte[] buffer = s.getBytes("utf-8");
            outputStream.write(buffer);
            // 不要忘記 flush
            outputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

4. 讀文件和寫文件的其他方式: Reader 和 Writer?

Reader 和 Writer 的使用方式和 InputStream,OutputStream 類似, 具體使用方式可以參考這兩個

4.1 Reader 讀取文件

方法

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

使用示例:??

public static void main(String[] args) {
        //使用字符流讀取文件內(nèi)容
        try(Reader reader = new FileReader("./test.txt")) {
            while(true) {
                char[] buffer = new char[1024];
                int n = reader.read(buffer);
                if(n == -1) {
                    break;
                }
                String s = new String(buffer,0,n);
                System.out.println(s);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

4.2 Writer 寫文件

方法?

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java

使用示例:?

public static void main(String[] args) {
        try(Writer writer = new FileWriter("./test.txt")) {
            String s = "你好";
            writer.write(s);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

?如果要以追加的形式寫文件, 只需要在在構(gòu)造方法中加一個true即可:

Writer writer = new FileWriter("./test.txt",true)

【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法,JavaEE,java-ee,java文章來源地址http://www.zghlxwxcb.cn/news/detail-803426.html

到了這里,關(guān)于【JavaEE】文件操作: File 類的用法和 InputStream, OutputStream 的用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • outputStream(輸出流)轉(zhuǎn)inputstream(輸入流)以及輸入流如何復(fù)用

    需求: 通過MultipartFile 上傳文件到文件服務(wù)器,上傳前要把文件轉(zhuǎn)為pdf格式進(jìn)行上傳,并生成文件摘要用來驗證服務(wù)器中的文件是否被篡改。 準(zhǔn)備: 需要涉及到 inputstream(輸入流)或outputStream(輸出流)要使用兩次 。 一、如果該文件本身就是pdf格式則直接進(jìn)行上傳。第一次

    2024年02月14日
    瀏覽(18)
  • <JavaEE> 文件IO -- File類和文件操作

    目錄 一、文件的概念 二、文件系統(tǒng) 三、文件類型 四、使用 File 類進(jìn)行文件操作 4.1 File 類中的 pathSeparator 屬性 4.2?File 類構(gòu)造方法 4.3?File 類常用方法 什么是文件? 廣義上的“文件”是指抽象化的操作系統(tǒng)中的硬件設(shè)備和軟件資源,目的是對這些“文件”進(jìn)行同一的管理。

    2024年02月04日
    瀏覽(31)
  • 在java中將inputStream對象轉(zhuǎn)換為File對象(不生成本地文件)

    需求說明 在后端中通過POI生成Excel文件流,將輸出流(outputStream)轉(zhuǎn)為輸入流(inputStream)后又需要將輸入流(inputStream)轉(zhuǎn)為File對象 問題:如果需要將輸入流(inputStream)轉(zhuǎn)為File對象,則必須要根據(jù)本地路徑去生成一個File對象才行,也就是說不管怎樣本地都必須要生成出來

    2024年02月15日
    瀏覽(18)
  • JavaEE初階:多線程 - Thread 類的基本用法

    JavaEE初階:多線程 - Thread 類的基本用法

    上次我們了解了多線程的五種創(chuàng)建方法,今天來學(xué)習(xí)Thread的基本用法。 目錄 run和start Thread常見的構(gòu)造方法 Thread的幾個常見屬性 后臺線程 是否存活 線程終止 1.使用標(biāo)志位 2.使用Thread自帶的標(biāo)志 等待線程 首先需要理解Thread的run和start的區(qū)別: run描述了線程要做的工作,star

    2024年02月12日
    瀏覽(24)
  • JavaEE--Thread 類的基本用法(不看你會后悔的嘿嘿)

    JavaEE--Thread 類的基本用法(不看你會后悔的嘿嘿)

    Thread類是JVM用來管理線程的一個類,換句話說,每個線程都唯一對應(yīng)著一個Thread對象. 因此,認(rèn)識和掌握Thread類彌足重要. 本文將從 線程創(chuàng)建 線程中斷 線程等待 線程休眠 獲取線程實例 等方面來進(jìn)行具體說明. 1)線程創(chuàng)建 方法1:通過創(chuàng)建Thread類的子類并重寫run ()?方法 方法2:通過創(chuàng)

    2023年04月09日
    瀏覽(16)
  • String 類的基本用法及String 類的常見操作

    String 類的基本用法及String 類的常見操作

    作者:月亮嚼成星~ 博客主頁:月亮嚼成星~的博客主頁 專欄:Java SE基礎(chǔ) 工欲善其事必先利其器,給大家介紹一款超牛的斬獲大廠offer利器——??途W(wǎng) 點(diǎn)擊免費(fèi)注冊和我一起刷題吧 總結(jié): 構(gòu)造字符串的三種方式: 1)使用常量串 2)直接使用new String對象 3)利用字符數(shù)組 St

    2024年02月02日
    瀏覽(18)
  • 【JavaEE】文件操作 —— IO

    【JavaEE】文件操作 —— IO

    文件內(nèi)容 文件大小 文件路徑 文件名稱 采用樹形結(jié)構(gòu)進(jìn)行管理。 分為兩種:相對、絕對路徑。 相對路徑:相對于當(dāng)前位置的路徑,以“./xxx.xxx”為標(biāo)志 絕對路徑:以從盤符開始到某一級的路徑 輸入和輸出是以 CPU的角度 進(jìn)行觀察。 輸出: 向屏幕上打印,就是打印內(nèi)容從

    2024年01月21日
    瀏覽(21)
  • 【JavaEE初階】 認(rèn)識文件與Java中操作文件

    【JavaEE初階】 認(rèn)識文件與Java中操作文件

    我們先來認(rèn)識狹義上的文件(file)。針對硬盤這種持久化存儲的I/O設(shè)備,當(dāng)我們想要進(jìn)行數(shù)據(jù)保存時,往往不是保存成一個整體,而是獨(dú)立成一個個的單位進(jìn)行保存,這個獨(dú)立的單位就被抽象成文件的概念,就類似辦公桌上的一份份真實的文件一般。 文件除了有數(shù)據(jù)內(nèi)容之外,

    2024年02月07日
    瀏覽(22)
  • Java的InputStream轉(zhuǎn)FileInputStream操作

    處理邏輯: 就是將輸入流寫到臨時文件中,再轉(zhuǎn)為文件流,最后刪除臨時文件 注意:

    2024年02月16日
    瀏覽(18)
  • JavaEE & 文件操作和IO & 目錄掃描全文檢索小程序

    JavaEE & 文件操作和IO & 目錄掃描全文檢索小程序

    不知道說啥了,看看吧 在之前的學(xué)習(xí)中,基本上都是圍繞內(nèi)存展開的~ MySQL 主要是操作硬盤的 文件IO也是是操作硬盤的~ IO : i nput o utput 創(chuàng)造文件,刪除文件,重命名文件,創(chuàng)建目錄······ 一些操作沒有權(quán)限也做不了~ 1.1 路徑 就是我們的文件系統(tǒng)上的一個文件/ 目錄 的具

    2023年04月09日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包