22_IO_第22天(File、遞歸)_講義

来源:https://www.cnblogs.com/wanghui1234/archive/2018/08/31/9567288.html
-Advertisement-
Play Games

今日內容介紹 1、File 2、遞歸 xmind:下載地址: 鏈接: "https://pan.baidu.com/s/1Eaj9yP5i0x4PiJsZA4StQg" 密碼:845a 01IO技術概述 A:IO技術概述 a: Output 把記憶體中的數據存儲到持久化設備上這個動作稱為輸出(寫)Ou ...


今日內容介紹
1、File
2、遞歸

xmind:下載地址:

鏈接:https://pan.baidu.com/s/1Eaj9yP5i0x4PiJsZA4StQg 密碼:845a

01IO技術概述

* A:IO技術概述
    * a: Output
        * 把記憶體中的數據存儲到持久化設備上這個動作稱為輸出(寫)Output操作
    * b: Input
        * 把持久設備上的數據讀取到記憶體中的這個動作稱為輸入(讀)Input操作
    * c: IO操作
        * 把上面的這種輸入和輸出動作稱為IO操作

02File類的概述和作用

* A:File類的概述和作用
    * a: File的概念
        * File類是文件和目錄路徑名的抽象表示形式
        * Java中把文件或者目錄(文件夾)都封裝成File對象
        * 我們要去操作硬碟上的文件,或者文件夾只要找到File這個類即可
        

03File類靜態的成員變數

* A:File類靜態的成員變數
    * a: pathSeparator
        * 與系統有關的路徑分隔符,為了方便,它被表示為一個字元串
    * b: separator
        * 與系統有關的預設名稱分隔符,為了方便,它被表示為一個字元串
        
    * c: 案例代碼
    
        /*
         *  java.io.File
         *    將操作系統中的,文件,目錄(文件夾),路徑,封裝成File對象
         *    提供方法,操作系統中的內容
         *    File與系統無關的類
         *    文件 file
         *    目錄 directory
         *    路徑 path
         */
        public class FileDemo {
            public static void main(String[] args) {
                //File類靜態成員變數
                //與系統有關的路徑分隔符
                String separator = File.pathSeparator;
                System.out.println(separator);// 是一個分號,目錄的分割
                (window中環境變數配置各個路徑用分號分割,表示一個完整的路徑結束)  Linux中是冒號 :
                
                //與系統有關的預設名稱分隔符
                separator = File.separator;
                System.out.println(separator);// 向右 \  目錄名稱分割  Linux / 
            }
        }

04File類構造方法_1

* A: File類構造方法_1
    * a: File(String pathname)
        * 通過將給定路徑名字元串轉換為一個File對象,之後可以使用File中的方法
        * windows中的路徑或文件名不區分大小寫
    * d: 案例代碼
        public class FileDemo1 {
            public static void main(String[] args) {
                function();
            }
            /*
             *  File(String pathname)
             *  傳遞路徑名: 可以寫到文件夾,可以寫到一個文件
             *  c:\\abc   c:\\abc\\Demo.java
             *  將路徑封裝File類型對象
             */
            public static void function(){
                File file = new File("d:\\eclipse");
                System.out.println(file);
            }
        }

05相對路徑和絕對路徑

* A: 相對路徑和絕對路徑
    * a: 絕對路徑
        * 絕對路徑是一個固定的路徑,從盤符開始
    * b: 相對路徑
        * 相對路徑相對於某個位置,在eclipse下是指當前項目下  
    * c: 路徑
            絕對路徑
                在系統中具有唯一性
                c:\\windows\\system32
            相對路徑
                表示路徑之間的關係
                D:\\develop\\Java\\jdk1.7.0_72\\bin
                D:\\develop\\Java\\jre7
                路徑之間關係
                    Java 父目錄是D:\\develop
                    Java 子目錄是:jdk1.7.0_72
                父路徑是 唯一性
                子目錄是可以多個

06File類的構造方法_2

* A: File類的構造方法_2
    * a:File(String parent, String child) 
        * 根據 parent 路徑名字元串和 child 路徑名字元串創建一個新 File 對象
                        
    * b: File(File parent, String child)
    
    * c: 案例代碼
    public class FileDemo1 {
        public static void main(String[] args) {
            function_2();
        }
        /*
         *  File(File parent,String child)
         *  傳遞路徑,傳遞File類型父路徑,字元串子路徑
         *  好處: 父路徑是File類型,父路徑可以直接調用File類方法
         */
        public static void function_2(){
            File parent = new File("d:");
            File file = new File(parent,"eclipse");
            System.out.println(file);
        }
        
        /*
         *  File(String parent,String child)
         *  傳遞路徑,傳遞字元串父路徑,字元串子路徑
         *  好處: 單獨操作父路徑和子路徑
         */
        public static void function_1(){
            File file = new File("d:","eclipse");
            System.out.println(file);
        }
    }

07File類創建文件功能

* A: File類創建文件功能
    * a: public boolean createNewFile()
        * 創建文件 如果存在這樣的文件,就不創建了
            
    * b: 案例代碼
        public class FileDemo2 {
            public static void main(String[] args)throws IOException {
                function();
            }                       
            /*
             *  File創建文件的功能
             *  boolean createNewFile()
             *  創建的文件路徑和文件名,在File構造方法中給出
             *  文件已經存在了,不在創建
             */
            public static void function()throws IOException{
                File file = new File("c:\\a.txt");
                boolean b = file.createNewFile();
                System.out.println(b);
            }
        }

08File類創建目錄功能

* A: File類創建目錄功能
    * a: 創建目錄
        * public boolean mkdir():創建文件夾 如果存在這樣的文件夾,就不創建了
        * public boolean mkdirs():創建文件夾,如果父文件夾不存在,會幫你創建出來
    * b: 案例代碼
        public class FileDemo2 {
            public static void main(String[] args)throws IOException {
                function_1();
            }
            /*
             *  File創建文件夾功能
             *  boolean mkdirs() 創建多層文件夾
             *  創建的路徑也在File構造方法中給出
             *  文件夾已經存在了,不在創建
             */
            public static void function_1(){
                File file = new File("c:\\abc");
                boolean b = file.mkdirs();
                System.out.println(b);
            }               
        }

09File類刪除功能

* A: File類刪除功能
    * a: 刪除功能
        * public boolean delete():刪除文件或者文件夾
* B: 案例代碼
    public class FileDemo2 {
        public static void main(String[] args)throws IOException {
            function_2();
        }
        /*
         *  File類的刪除功能
         *  boolean delete()
         *  刪除的文件或者是文件夾,在File構造方法中給出
         *  刪除成功返回true,刪除失敗返回false
         *  刪除方法,不走回收站,直接從硬碟中刪除
         *  刪除有風險,運行需謹慎
         */
        public static void function_2(){
            File file = new File("c:\\a.txt");
            boolean b = file.delete();
            System.out.println(b);
        }           
    }
    

10File類獲取功能

* A:File類獲取功能
    * a: 方法介紹
        * String getName(): 返迴路徑中表示的文件或者文件夾名
            * 獲取路徑中的最後部分的名字
        * long length(): 返迴路徑中表示的文件的位元組數
        * String getAbsolutePath(): 獲取絕對路徑,返回String對象
        * File   getAbsoluteFile() : 獲取絕對路徑,返回File對象
            * eclipse環境中,寫一個相對路徑,絕對位置工程根目錄
        * String getParent(): 獲取父路徑,返回String對象
        * File getParentFile(): 獲取父路徑,返回File對象
                
    * b: 案例代碼
    
        public class FileDemo3 {
            public static void main(String[] args) {
                function_3();
            }
            /*
             * File類的獲取功能
             * String getParent() 返回String對象
             * File getParentFile()返回File對象
             * 獲取父路徑
             */
            public static void function_3(){
                File file = new File("d:\\eclipse\\eclipse.exe");
                File parent = file.getParentFile();
                System.out.println(parent);
            }
            
            /*
             * File類獲取功能
             * String getAbsolutePath() 返回String對象
             * File   getAbsoluteFile() 返回File對象
             * 獲取絕對路徑
             * eclipse環境中,寫的是一個相對路徑,絕對位置工程根目錄
             */
            public static void function_2(){
                File file = new File("src");
                File absolute = file.getAbsoluteFile();
                System.out.println(absolute);
            }
            
            /*
             * File類獲取功能
             * long length()
             * 返迴路徑中表示的文件的位元組數
             */
            public static void function_1(){
                File file = new File("d:\\eclipse\\eclipse.exe");
                long length = file.length();
                System.out.println(length);
            }
            
            /*
             *  File類的獲取功能
             *  String getName()
             *  返迴路徑中表示的文件或者文件夾名
             *  獲取路徑中的最後部分的名字
             */
            public static void function(){
                File file = new File("d:\\eclipse\\eclipse.exe");
                String name = file.getName();
                System.out.println(name);
                
                /*String path = file.getPath();
                System.out.println(path);*/
        //      System.out.println(file);
            }
        }

11File類判斷功能

* A: File類判斷功能
    * a: 方法介紹
        * boolean exists(): 判斷File構造方法中封裝路徑是否存在
            * 存在返回true,不存在返回false
        * boolean isDirectory(): 判斷File構造方法中封裝的路徑是不是文件夾
            * 如果是文件夾,返回true,不是文件返回false
        * boolean isFile(): 判斷File構造方法中封裝的路徑是不是文件
            * 如果是文件,返回true,不是文件返回false

    * b: 案例代碼
        public class FileDemo4 {
            public static void main(String[] args) {
                function_1();
            }
            /*
             *  File判斷功能
             *  boolean isDirectory()
             *  判斷File構造方法中封裝的路徑是不是文件夾
             *  如果是文件夾,返回true,不是文件返回false
             *  
             *  boolean isFile()
             *  判斷File構造方法中封裝的路徑是不是文件
             */
            public static void function_1(){
                File file = new File("d:\\eclipse\\eclipse.exe");
                if(file.exists()){
                    boolean b = file.isDirectory();
                    System.out.println(b);
                }
            }
            
            /*
             *  File判斷功能
             *  boolean exists()
             *  判斷File構造方法中封裝路徑是否存在
             *  存在返回true,不存在返回false
             */
            public static void function(){
                File file = new File("src");
                boolean b = file.exists();
                System.out.println(b);
            }
        }

12File類list獲取功能

* A: File類list獲取功能
    * a: 方法介紹
        * String[] list():獲取到File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄)
            * 返回只有名字
        * File[] listFiles():獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄)
            * 返回的是目錄或者文件的全路徑
        * static File[] listRoots(): 列出可用的文件系統根 
    
    * b: 案例代碼
        public class FileDemo {
            public static void main(String[] args) {
                function_2();
            }
            public static void function_2(){
                //獲取系統中的所有根目錄
                File[] fileArr = File.listRoots();
                for(File f : fileArr){
                    System.out.println(f);
                }
            }
            
            /*
             *  File類的獲取功能
             *  File[] listFiles()
             *  獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄)
             *  返回的是目錄或者文件的全路徑
             */
            public static void function_1(){
                File file = new File("d:\\eclipse");
                File[] fileArr = file.listFiles();
                for(File f : fileArr){
                    System.out.println(f);
                }
            }
            
            /*
             *  File類的獲取功能
             *  String[] list()
             *  獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄)
             *  返回只有名字
             */
            public static void function(){
                File file = new File("c:");
                String[] strArr = file.list();
                System.out.println(strArr.length);
                for(String str : strArr){
                    System.out.println(str);
                }
            }
        }

13文件過濾器

* A: 文件過濾器
    * a: 作用
        * 過濾一個目錄下的指定擴展名的文件,或者包含某些關鍵字的文件夾
        
    * b: 方法介紹
        * public String[] list(FilenameFilter filter)
        * public File[] listFiles(FileFilter filter)
        
    * C: 案例代碼   
        /*
         *  自定義過濾器
         *  實現FileFilter介面,重寫抽象方法
         */
        public class MyFilter implements FileFilter{
            public boolean accept(File pathname)  {
                /*
                 * pathname 接受到的也是文件的全路徑
                 * c:\\demo\\1.txt
                 * 對路徑進行判斷,如果是java文件,返回true,不是java文件,返回false
                 * 文件的尾碼結尾是.java
                 */
                //String name = pathname.getName();
                return pathname.getName().endsWith(".java");
                
            }
        }
        
        /*
         *  File類的獲取,文件獲取過濾器
         *  遍歷目錄的時候,可以根據需要,只獲取滿足條件的文件
         *  遍歷目錄方法 listFiles()重載形式
         *  listFiles(FileFilter filter)介面類型
         *  傳遞FileFilter介面的實現類
         *  自定義FileFilter介面實現類,重寫抽象方法,
         *  介面實現類對象傳遞到遍歷方法listFiles
         */
        public class FileDemo1 {
            public static void main(String[] args) {
                File file = new File("c:\\demo");
                File[] fileArr = file.listFiles(new MyFilter());
                for(File f : fileArr){
                    System.out.println(f);
                }
            }
        }
            

14文件過濾器_原理分析

* A:文件過濾器_原理分析
    * listFiles()遍歷目錄的同時,獲取到了文件名全路徑,調用過濾器的方法accept,
    * 將獲取到的路徑傳遞給accept方法的參數pathname
    * accept方法接收了參數pathname,參數是listFiles傳遞來的
    * 在accept方法中,進行判斷,如果這個路徑是Java文件,返回true,走著返回false
    * 一旦方法返回了true
    * listFiles將路徑保存到File數組中

15遞歸遍歷全目錄

* A: 遞歸遍歷全目錄
    * a: 案例代碼
        /*
         *  對一個目錄的下的所有內容,進行完全的遍歷
         *  編程技巧,方法的遞歸調用,自己調用自己
         */
        public class FileDemo {
            public static void main(String[] args) {
                File dir = new File("d:\\eclipse");
                getAllDir(dir);
            }
            /*
             *  定義方法,實現目錄的全遍歷
             */
            public static void getAllDir(File dir){
                System.out.println(dir);
                //調用方法listFiles()對目錄,dir進行遍歷
                File[] fileArr = dir.listFiles();
                for(File f : fileArr){
                    //判斷變數f表示的路徑是不是文件夾
                    if(f.isDirectory()){
                        //是一個目錄,就要去遍歷這個目錄
                        //本方法,getAllDir,就是給個目錄去遍歷
                        //繼續調用getAllDir,傳遞他目錄
                        getAllDir(f);
                    }else{
                        System.out.println(f);
                    }
                }
            }
        }

16遞歸概念和註意事項

* A:遞歸概念和註意事項
    * a: 遞歸概念
        * 遞歸,指在當前方法內調用自己的這種現象
        * 遞歸分為兩種,直接遞歸和間接遞歸
        * 直接遞歸稱為方法自身調用自己。間接遞歸可以A方法調用B方法,B方法調用C方法,C方法調用A方法
    * b: 註意事項
        * 遞歸一定要有出口, 必須可以讓程式停下
        * 遞歸次數不能過多
        * 構造方法,禁止遞歸
    

17遞歸求和計算

* A: 遞歸求和計算
    * a: 題目分析
        * 1+2+3+...+(n-1)+n:求1到n的和
        * 總結規律:1到n的和等於1到(n-1)的和再加n
        * getSum(n-1)+ n
        * 遞歸出口:getSum(1) return 1;
    
    * b: 案例代碼   
        /*
         *  方法的遞歸調用
         *    方法自己調用自己
         *  適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化
         *  註意:
         *     遞歸一定要有出口, 必須可以讓程式停下
         *     遞歸次數不能過多
         *     構造方法,禁止遞歸
         */
        public class DiGuiDemo {
            public static void main(String[] args) {
                int sum = getSum(3);
                System.out.println(sum);
            }


            /*
             *  計算 1+2+3+100和 = 5050
             *  計算規律:
             *    n+(n-1)+(n-2)
             *    100+(100-1)+(99-1)+...1
             */
            public static int getSum(int n){
                if( n == 1)
                    return 1;
                return n + getSum(n-1);
            }
            
        }
        

18遞歸求階乘

* A: 遞歸求和計算
    * a: 題目分析
        * 5!=5*4*3*2*1
        *   =5*4!
        * 4!=4*3!
        * 3!=3*2!
        * 2!=2*1!
        * 1!=1
        * n!=n*(n-1)!
        * 遞歸出口:n*getJieCheng(n-1):  getJieCheng(1) return 1;
    * b: 案例代碼
        /*
         *  方法的遞歸調用
         *    方法自己調用自己
         *  適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化
         *  註意:
         *     遞歸一定要有出口, 必須可以讓程式停下
         *     遞歸次數不能過多
         *     構造方法,禁止遞歸
         */
        public class DiGuiDemo {
            public static void main(String[] args) {                    
                System.out.println(getJieCheng(5));
                
            }
                            
            /* 
             *  計算階乘 5!
             *   5*4*3*2*1
             */
            public static int getJieCheng(int n){
                if ( n == 1)
                    return 1;
                return n * getJieCheng(n-1);
            }                               
        }

19遞歸計算斐波那契數列

* A: 遞歸計算斐波那契數列
    * a:題目分析
        * 1 1 2 3 5 8 13 21
        * 從第三項開始,後面的每一項都等於前面兩項的和,第一項和第二項的值為1,作為程式的出口
    * b: 案例代碼
        /*
         *  方法的遞歸調用
         *    方法自己調用自己
         *  適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化
         *  註意:
         *     遞歸一定要有出口, 必須可以讓程式停下
         *     遞歸次數不能過多
         *     構造方法,禁止遞歸
         */
        public class DiGuiDemo {
            public static void main(String[] args) {                    
                System.out.println(getFBNQ(12));
            }
            /*
             *  方法遞歸,計算斐波那契數列
             *  
             */
            public static int getFBNQ(int month){
                if( month == 1)
                    return 1;
                if( month == 2)
                    return 1;
                return getFBNQ(month-1)+getFBNQ(month-2);
            }
        }

20遍歷目錄下的所有java文件

* A: 遍歷目錄下的所有java文件
    * a: 案例代碼
        public class MyJavaFilter implements FileFilter {
            public boolean accept(File pathname) {
                //判斷獲取的是目錄,直接返回true
                if(pathname.isDirectory())
                    return true;
                return pathname.getName().toLowerCase().endsWith(".java");
            }

        }
        /*
         *  遍歷目錄,獲取目錄下的所有.java文件
         *  遍歷多級目錄,方法遞歸實現
         *  遍歷的過程中,使用過濾器
         */
        public class FileDemo1 {
            public static void main(String[] args) {
                getAllJava(new File("c:\\demo"));
        //      new File("c:\\demo").delete();
            }
            /*
             * 定義方法,實現遍歷指定目錄
             * 獲取目錄中所有的.java文件
             */
            public static void getAllJava(File dir){
                //調用File對象方法listFiles()獲取,加入過濾器
                File[] fileArr = dir.listFiles(new MyJavaFilter());
                for(File f : fileArr){
                    //對f路徑,判斷是不是文件夾
                    if(f.isDirectory()){
                        //遞歸進入文件夾遍歷
                        getAllJava(f);
                    }else{
                        System.out.println(f);
                    }
                }
            }

作業測試

1.使用文件名稱過濾器篩選將指定文件夾下的小於200K的小文件獲取並列印。

2.從鍵盤接收一個文件夾路徑,統計該文件夾大小。

3.從鍵盤接收一個文件夾路徑,刪除該文件夾。

4.從鍵盤接收一個文件夾路徑,把文件夾中的所有文件以及文件夾的名字按層級列印

例如:
aaa是文件夾,裡面有bbb.txt,ccc.txt,ddd.txt這些文件,有eee這樣的文件夾,eee中有fff.txt和ggg.txt,列印出層級來
aaa
    bbb.txt
    ccc.txt
    ddd.txt 
    eee
        fff.txt
        ggg.txt

5.鍵盤錄入一個文件夾路徑,統計該文件夾(包含子文件夾)中每種類型的文件及個數,註意:用文件類型(尾碼名,不包含.(點),如:"java","txt")作為key,

用個數作為value,放入到map集合中,並用兩種方式遍歷map集合
例如:
doc 的類型的文件有  3 個
java 的類型的文件有  5 個
txt 的類型的文件有  7 個

如果想進一步的交流,可以加入我們的QQ群,裡面有最新的學習資料,可以學習。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 輸入輸出樣例 輸入樣例#1: 8 186 186 150 200 160 130 197 220 輸出樣例#1: 4 輸入樣例#1: 8 186 186 150 200 160 130 197 220 輸出樣例#1: 4 此題意在先升後降子序列,單調遞增子序列,單調遞減子序列當中找到最長的一組序列。 ...
  • 一丶約束 當我們編寫項目時會創建很多個類,來實現很多個功能,最後又需要把這些類都聯繫成一個,我們就需要來約束一下那些類中的方法,把需要聯繫的約束成一個方法. Email類繼承了BaseMessage,所以Email類中必須有send方法,否則就會報錯,我們用這樣的來約束類 編寫. 示例: class ...
  • 上傳文件的分類: 無論什麼方式上傳文件,都要用post提交方式一: 前端:表單方式上傳文件 <form action="" method="post" enctype="multipart/form-data"> <!--非文件域--> <input type="text" name="desc"/ ...
  • 題意 $n$個食物,每個食物有一個滿意度,從中選出$m$個,使得滿意度最大 同時有$k$個關係:若$x_i$在$y_i$之前吃,則會獲得$C_i$的代價 Sol 官方題解是$O(2^n n^2)$的,不過我沒發現狀態之間的聯繫,就寫了一個$O(2^n n^3)$的,不過還是水過去了。 $f[i][j ...
  • 每天下班回家有時間就寫個小例子,一個月下來的成果,分享給大家學習~ 第一題 1、2、3、4個數字,能組成多少個互不相同且無重覆數字的三位數?都是多少? 程式分析: 可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。 代碼: 第二題 企業發放的獎金根據利潤提成。利 ...
  • 不同於傳統集中時Springmvc 全局異常,具體查看前面的章節https://www.cnblogs.com/zwdx/p/8963311.html 對於springboot框架來講,這裡我就介紹一種 1、ExceptionHandlerAdvice 由於是前後端分離,所以使用@ResponseB ...
  • JDK中已經內置了Webservice發佈,不過要用Tomcat等Web伺服器發佈WebService,還需要用第三方Webservice框架。Axis2和CXF是目前最流行的Webservice框架,這兩個框架各有優點,不過都屬於重量級框架。 JAX-WS RI是JAX WebService參考實 ...
  • 題外話 複習多線程的知識,偶然看到一道題:如何正確的停止一個線程?我第一反應是使用stop()方法停止,操作以後發現stop已經被廢棄了。 經過查找資料,發現是使用interrupt()進行中斷標記然後在進行停止,特此寫這篇隨筆記錄一下。 stop()、suspend()的缺點 1.會導致一些清理工 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...