1. 程式人生 > 實用技巧 >1025. 除數博弈(C++)

1025. 除數博弈(C++)

1.1.pathSeparator 、separator

        /*
            static String pathSeparator 與系統有關的路徑分隔符,為了方便,它被表示為一個字串。
            static char pathSeparatorChar 與系統有關的路徑分隔符。

            static String separator 與系統有關的預設名稱分隔符,為了方便,它被表示為一個字串。
            static char separatorChar 與系統有關的預設名稱分隔符。

            操作路徑:路徑不能寫死了
            C:\develop\a\a.txt  windows
            C:/develop/a/a.txt  linux
            "C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
         */
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);//路徑分隔符 windows:分號;  linux:冒號:

        String separator = File.separator;
        System.out.println(separator);// 檔名稱分隔符 windows:反斜槓\  linux:正斜槓/

1.2.File類的構造方法

  • publicFile(Stringpathname) :通過將給定的路徑名字串轉換為抽象路徑名來建立新的 File例項。
  • publicFile(Stringparent,Stringchild) :從父路徑名字串和子路徑名字串建立新的 File例項。
  • publicFile(Fileparent,Stringchild) :從父抽象路徑名和子路徑名字串建立新的 File例項。
import java.io.File;

/*
    路徑:
        絕對路徑:是一個完整的路徑
            以碟符(c:,D:)開始的路徑
                c:\\a.txt
                C:\\Users\itcast\\IdeaProjects\\shungyuan\\123.txt
                D:\\demo\\b.txt
        相對路徑:是一個簡化的路徑
            相對指的是相對於當前專案的根目錄(C:\\Users\itcast\\IdeaProjects\\shungyuan)
            如果使用當前專案的根目錄,路徑可以簡化書寫
            C:\\Users\itcast\\IdeaProjects\\shungyuan\\123.txt-->簡化為: 123.txt(可以省略專案的根目錄)
        注意:
            1.路徑是不區分大小寫
            2.路徑中的檔名稱分隔符windows使用反斜槓,反斜槓是轉義字元,兩個反斜槓代表一個普通的反斜槓
 */
public class Demo02File {
    public static void main(String[] args) {
        /*
            File類的構造方法
         */
        //show02("c:\\","a.txt");//c:\a.txt
        //show02("d:\\","a.txt");//d:\a.txt
        show03();

        File f = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
        long length = f.length();
        System.out.println(length);
    }

    /*
        File(File parent, String child) 根據 parent 抽象路徑名和 child 路徑名字串建立一個新 File 例項。
        引數:把路徑分成了兩部分
            File parent:父路徑
            String child:子路徑
        好處:
             父路徑和子路徑,可以單獨書寫,使用起來非常靈活;父路徑和子路徑都可以變化
             父路徑是File型別,可以使用File的方法對路徑進行一些操作,再使用路徑建立物件
     */
    private static void show03() {
        File parent = new File("c:\\");
        File file = new File(parent,"hello.java");
        System.out.println(file);//c:\hello.java
    }

    /*
        File(String parent, String child) 根據 parent 路徑名字串和 child 路徑名字串建立一個新 File 例項。
        引數:把路徑分成了兩部分
            String parent:父路徑
            String child:子路徑
        好處:
            父路徑和子路徑,可以單獨書寫,使用起來非常靈活;父路徑和子路徑都可以變化
     */
    private static void show02(String parent, String child) {
        File file = new File(parent,child);
        System.out.println(file);//c:\a.txt
    }

    /*
        File(String pathname) 通過將給定路徑名字串轉換為抽象路徑名來建立一個新 File 例項。
        引數:
            String pathname:字串的路徑名稱
            路徑可以是以檔案結尾,也可以是以資料夾結尾
            路徑可以是相對路徑,也可以是絕對路徑
            路徑可以是存在,也可以是不存在
            建立File物件,只是把字串路徑封裝為File物件,不考慮路徑的真假情況
     */
    private static void show01() {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
        System.out.println(f1);//重寫了Object類的toString方法 C:\Users\itcast\IdeaProjects\shungyuan\a.txt

        File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
        System.out.println(f2);//C:\Users\itcast\IdeaProjects\shungyuan

        File f3 = new File("b.txt");
        System.out.println(f3);//b.txt
    }
}

1.3.getAbsolutePath、

publicStringgetAbsolutePath() :返回此File的絕對路徑名字串。
publicStringgetPath() :將此File轉換為路徑名字串。
publicStringgetName() :返回由此File表示的檔案或目錄的名稱。
publiclonglength() :返回由此File表示的檔案的長度。

絕對路徑和相對路徑
絕對路徑:從碟符開始的路徑,這是一個完整的路徑。
相對路徑:相對於專案目錄的路徑,這是一個便捷的路徑,開發中經常使用。   

/*
    File類獲取功能的方法
        - public String getAbsolutePath() :返回此File的絕對路徑名字串。
        - public String getPath() :將此File轉換為路徑名字串。
        - public String getName()  :返回由此File表示的檔案或目錄的名稱。
        - public long length()  :返回由此File表示的檔案的長度。
 */
public class Demo03File {
    public static void main(String[] args) {
        show04();
    }

    /*
        public long length()  :返回由此File表示的檔案的長度。
        獲取的是構造方法指定的檔案的大小,以位元組為單位
        注意:
            資料夾是沒有大小概念的,不能獲取資料夾的大小
            如果構造方法中給出的路徑不存在,那麼length方法返回0
     */
    private static void show04() {
        File f1 = new File("C:\\develop\\a\\1.jpg");
        long l1 = f1.length();
        System.out.println(l1);//780831位元組

        File f2 = new File("C:\\develop\\a\\2.jpg");
        System.out.println(f2.length());//0

        File f3 = new File("C:\\develop\\a");
        System.out.println(f3.length());//0 資料夾沒有大小概念的
    }

    /*
        public String getName()  :返回由此File表示的檔案或目錄的名稱。
        獲取的就是構造方法傳遞路徑的結尾部分(檔案/資料夾)
     */
    private static void show03() {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
        String name1 = f1.getName();
        System.out.println(name1);//a.txt

        File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
        String name2 = f2.getName();
        System.out.println(name2);//shungyuan
    }

    /*
        public String getPath() :將此File轉換為路徑名字串。
        獲取的構造方法中傳遞的路徑

        toString方法呼叫的就是getPath方法
        原始碼:
            public String toString() {
                return getPath();
            }
     */
    private static void show02() {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
        File f2 = new File("a.txt");
        String path1 = f1.getPath();
        System.out.println(path1);//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
        String path2 = f2.getPath();
        System.out.println(path2);//a.txt

        System.out.println(f1);//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
        System.out.println(f1.toString());//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
    }

    /*
        public String getAbsolutePath() :返回此File的絕對路徑名字串。
        獲取的構造方法中傳遞的路徑
        無論路徑是絕對的還是相對的,getAbsolutePath方法返回的都是絕對路徑
     */
    private static void show01() {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
        String absolutePath1 = f1.getAbsolutePath();
        System.out.println(absolutePath1);//C:\Users\itcast\IdeaProjects\shungyuan\a.txt

        File f2 = new File("a.txt");
        String absolutePath2 = f2.getAbsolutePath();
        System.out.println(absolutePath2);//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
    }
}

1.4.判斷功能的方法

publicbooleanexists() :此File表示的檔案或目錄是否實際存在。
publicbooleanisDirectory() :此File表示的是否為目錄。
publicbooleanisFile() :此File表示的是否為檔案。

import java.io.File;

/*
    File類判斷功能的方法
        - public boolean exists() :此File表示的檔案或目錄是否實際存在。
        - public boolean isDirectory() :此File表示的是否為目錄。
        - public boolean isFile() :此File表示的是否為檔案。
 */
public class Demo04File {
    public static void main(String[] args) {
        show02();
    }

    /*
        public boolean isDirectory() :此File表示的是否為目錄。
            用於判斷構造方法中給定的路徑是否以資料夾結尾
                是:true
                否:false
        public boolean isFile() :此File表示的是否為檔案。
            用於判斷構造方法中給定的路徑是否以檔案結尾
                是:true
                否:false
        注意:
            電腦的硬碟中只有檔案/資料夾,兩個方法是互斥
            這兩個方法使用前提,路徑必須是存在的,否則都返回false
     */
    private static void show02() {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shung");

        //不存在,就沒有必要獲取
        if(f1.exists()){
            System.out.println(f1.isDirectory());
            System.out.println(f1.isFile());
        }

        File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
        if(f2.exists()){
            System.out.println(f2.isDirectory());//true
            System.out.println(f2.isFile());//false
        }

        File f3 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\shungyuan.iml");
        if(f3.exists()){
            System.out.println(f3.isDirectory());//false
            System.out.println(f3.isFile());//true
        }
    }

    /*
        public boolean exists() :此File表示的檔案或目錄是否實際存在。
        用於判斷構造方法中的路徑是否存在
            存在:true
            不存在:false
     */
    private static void show01() {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
        System.out.println(f1.exists());//true

        File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shung");
        System.out.println(f2.exists());//false

        File f3 = new File("shungyuan.iml");//相對路徑 C:\Users\itcast\IdeaProjects\shungyuan\shungyuan.iml
        System.out.println(f3.exists());//true

        File f4 = new File("a.txt");
        System.out.println(f4.exists());//false
    }
}  

1.5.建立刪除功能的方法

publicbooleancreateNewFile() :當且僅當具有該名稱的檔案尚不存在時,建立一個新的空檔案。
publicbooleandelete() :刪除由此File表示的檔案或目錄。
publicbooleanmkdir() :建立由此File表示的目錄。
publicbooleanmkdirs() :建立由此File表示的目錄,包括任何必需但不存在的父目錄。

import java.io.File;
import java.io.IOException;

/*
    File類建立刪除功能的方法
        - public boolean createNewFile() :當且僅當具有該名稱的檔案尚不存在時,建立一個新的空檔案。
        - public boolean delete() :刪除由此File表示的檔案或目錄。
        - public boolean mkdir() :建立由此File表示的目錄。
        - public boolean mkdirs() :建立由此File表示的目錄,包括任何必需但不存在的父目錄。
 */
public class Demo05File {
    public static void main(String[] args) throws IOException {
        show03();
    }

    /*
        public boolean delete() :刪除由此File表示的檔案或目錄。
        此方法,可以刪除構造方法路徑中給出的檔案/資料夾
        返回值:布林值
            true:檔案/資料夾刪除成功,返回true
            false:資料夾中有內容,不會刪除返回false;構造方法中路徑不存在false
        注意:
            delete方法是直接在硬碟刪除檔案/資料夾,不走回收站,刪除要謹慎
     */
    private static void show03() {
        File f1 = new File("08_FileAndRecursion\\新建資料夾");
        boolean b1 = f1.delete();
        System.out.println("b1:"+b1);

        File f2 = new File("08_FileAndRecursion\\abc.txt");
        System.out.println(f2.delete());
    }

    /*
       public boolean mkdir() :建立單級空資料夾
       public boolean mkdirs() :既可以建立單級空資料夾,也可以建立多級資料夾
       建立資料夾的路徑和名稱在構造方法中給出(構造方法的引數)
        返回值:布林值
            true:資料夾不存在,建立資料夾,返回true
            false:資料夾存在,不會建立,返回false;構造方法中給出的路徑不存在返回false
        注意:
            1.此方法只能建立資料夾,不能建立檔案
     */
    private static void show02() {
        File f1 = new File("08_FileAndRecursion\\aaa");
        boolean b1 = f1.mkdir();
        System.out.println("b1:"+b1);

        File f2 = new File("08_FileAndRecursion\\111\\222\\333\\444");
        boolean b2 = f2.mkdirs();
        System.out.println("b2:"+b2);

        File f3 = new File("08_FileAndRecursion\\abc.txt");
        boolean b3 = f3.mkdirs();//看型別,是一個檔案
        System.out.println("b3:"+b3);

        File f4 = new File("08_F\\ccc");
        boolean b4 = f4.mkdirs();//不會丟擲異常,路徑不存在,不會建立
        System.out.println("b4:"+b4);
    }

    /*
        public boolean createNewFile() :當且僅當具有該名稱的檔案尚不存在時,建立一個新的空檔案。
        建立檔案的路徑和名稱在構造方法中給出(構造方法的引數)
        返回值:布林值
            true:檔案不存在,建立檔案,返回true
            false:檔案存在,不會建立,返回false
        注意:
            1.此方法只能建立檔案,不能建立資料夾
            2.建立檔案的路徑必須存在,否則會丟擲異常

        public boolean createNewFile() throws IOException
        createNewFile宣告丟擲了IOException,我們呼叫這個方法,就必須的處理這個異常,要麼throws,要麼trycatch
     */
    private static void show01() throws IOException {
        File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_FileAndRecursion\\1.txt");
        boolean b1 = f1.createNewFile();
        System.out.println("b1:"+b1);

        File f2 = new File("08_FileAndRecursion\\2.txt");
        System.out.println(f2.createNewFile());

        File f3 = new File("08_FileAndRecursion\\新建資料夾");
        System.out.println(f3.createNewFile());//不要被名稱迷糊,要看型別

        File f4 = new File("08_FileAndRecursi\\3.txt");
        System.out.println(f4.createNewFile());//路徑不存在,丟擲IOException
    }
}

1.6.File類遍歷(資料夾)目錄功能

import java.io.File;

/*
    File類遍歷(資料夾)目錄功能
        - public String[] list() :返回一個String陣列,表示該File目錄中的所有子檔案或目錄。
        - public File[] listFiles() :返回一個File陣列,表示該File目錄中的所有的子檔案或目錄。

    注意:
        list方法和listFiles方法遍歷的是構造方法中給出的目錄
        如果構造方法中給出的目錄的路徑不存在,會丟擲空指標異常
        如果構造方法中給出的路徑不是一個目錄,也會丟擲空指標異常
 */
public class Demo06File {
    public static void main(String[] args) {
        show02();
    }

    /*
        public File[] listFiles() :返回一個File陣列,表示該File目錄中的所有的子檔案或目錄。
        遍歷構造方法中給出的目錄,會獲取目錄中所有的檔案/資料夾,把檔案/資料夾封裝為File物件,多個File物件儲存到File陣列中
     */
    private static void show02() {
        File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_FileAndRecursion");
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f);
        }
    }

    /*
        public String[] list() :返回一個String陣列,表示該File目錄中的所有子檔案或目錄。
        遍歷構造方法中給出的目錄,會獲取目錄中所有檔案/資料夾的名稱,把獲取到的多個名稱儲存到一個String型別的陣列中
     */
    private static void show01() {
        //File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_FileAndRecursion\\1.txt");//NullPointerException
        //File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_Fi");//NullPointerException
        File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_FileAndRecursion");
        String[] arr = file.list();
        for (String fileName : arr) {
            System.out.println(fileName);
        }
    }
}