目錄
- 一、File
- 1.定義:
- 2.創建File類的對象
- 3.File提供的判斷文件類型、獲取文件信息功能
- 4.File提供的創建的方法
- 5.File類刪除文件的功能
- 6.File提供的遍歷文件夾的方法
- 代碼演示
- 二、遞歸(了解遞歸算法,以便實現多級遍歷找文件)
- 1.定義
- 2.遞歸的形式
- 3.遞歸三要素
- 代碼演示
- 4.文件搜索(重要)
- 三、字符集
- 1. 標準ASCII字符串
- 2.GBK(漢字內碼擴展規范,國標)
- 3.Unicode字符集(統一碼,也叫萬國碼)
- 4.對字符的編碼
- 5.對字符的解碼
- 代碼演示
一、File
1.定義:
是java.io.包小的類,File類的對象,用于代表當前操作系統的文件(可以是文件、或文件夾)。
2.創建File類的對象
- public File(String pathname):根據文件路徑創建文件對象。
- public File(String parent,String child):根據父路徑和子路徑名字創建文件對象。
- public File(File parent,String child):根據父路徑對應文件對象和子路徑名字創建文件對象。
3.File提供的判斷文件類型、獲取文件信息功能
- public boolean exists():判斷當前文件對象,對飲的文件路徑是否存在,存在返回True。
- public boolean isFile():判斷當前文件對象指代的是否是文件,是返回True。
- public boolean isDirectory():判斷當前文件對象指代的是否是文件夾,是返回True。
- public String getName():獲取文件的名稱(包含后綴)
- public long lastModified():獲取文件的大小,返回字節個數
- public String getPath():獲取創建文件對象,使用的路徑。
- public String getAbsolutePath():獲取絕對路徑。
4.File提供的創建的方法
- public boolean createNewFile():創建問價
- public boolean mkdir():創建一級文件夾
- public boolean mkdirs():創建多級文件夾
5.File類刪除文件的功能
- public boolean delete():刪除文件、文件夾,只能刪除空文件夾。
6.File提供的遍歷文件夾的方法
- public String[] list():獲取當前目錄下所有的“一級文件名稱”到一個字符串數組中去。
- public File[] listFiles():獲取當前目錄下所有的“一級文件對象”到一個文件對象數組中去(重點)
使用listFiles方法時的注意事項:
- 當主調是文件,或者路徑不存在時,返回null
- 當主調是空文件夾時,返回一個長度為0的數組。
- 當主調是一個有內容的文件夾時,將里面所有一級文件和文件夾的路徑放在File數組中返回。
- 當主調是一個文件夾,且里面有隱藏文件時,將里面所有文件和文件夾的路徑放在File數組中返回,包括隱藏文件。
- 當主調是一個文件夾,但是沒有權限訪問該文件夾時,返回null。
代碼演示
package com.item.demo1Flie;
import java.io.File;
import java.io.IOException;
public class Fliedemo1 {public static void main(String[] args) throws IOException {//1.創建File類的對象File f1 = new File("D:\\a.docx");File f2=new File("D:/a.docx");System.out.println(f1.length());//0System.out.println(f2.length());//0System.out.println(f1.exists());//trueSystem.out.println(f1.isFile());//trueSystem.out.println(f1.isDirectory());//falseSystem.out.println(f1.getName());//a.docx//2.只要帶盤符的都稱之為絕對路徑。//3.相對路徑:不帶盤符的都是相對路徑,一般都是找到項目根目錄下的文件。System.out.println(f1.getPath());//D:/a.docxSystem.out.println(f1.getAbsolutePath());//D:/a.docxFile f3=new File("day3\\src\\dilei0.txt");System.out.println(f3.length());//10//4.創建對象代表不存在的文件路徑File f4=new File("D:/aa.docx");System.out.println(f4.exists());//falseSystem.out.println(f4.createNewFile());//把這個文件創建出來,true//5.創建對象代表不存在的文件夾,mkdir(),mkdirs()File f5=new File("D:/bb");System.out.println(f5.exists());//falseSystem.out.println(f5.mkdir());//只能創建一級文件夾,trueFile f6=new File("D:/cc/aa");System.out.println(f5.mkdirs());//可以創建多級文件夾,true//6.創建File對象代表存在的文件,然后刪除,File f7=new File("D:/a.docx");System.out.println(f7.delete());//刪除文件,true,只能刪除空文件夾。//7.可以獲取某個目錄下的全部一級名稱File f8=new File("D:/");String[] names=f8.list();for (String name : names) {System.out.println(name);}//8.可以獲取某個目錄下的全部一級文件對象File[] files=f8.listFiles();for (File file : files) {System.out.println(file.getAbsoluteFile());}}
}
二、遞歸(了解遞歸算法,以便實現多級遍歷找文件)
1.定義
遞歸是一種算法,在程序語言中廣泛應用
從形式上說:方法調用自身的形式稱為方法遞歸。
2.遞歸的形式
直接遞歸:方法自己調用自己
間接遞歸:方法調用其他方法,其他方法有回調方法自己。
3.遞歸三要素
- 遞歸的公式:
- 遞歸的終點:
- 遞歸的方向要走向終結點。
代碼演示
例題:計算n的階乘
需求:計算n的階乘,5的階乘=12345等
分析:1.f(n)=12…*(n-1)*n
2.那么公式等價于f(n)=f(n-1)*n
3.則求1-5的階乘:
f(5)=f(4)*5
f(4)=f(3)*4
f(3)=f(2)*3
f(2)=f(1)*2
f(1)=1
package com.item.demo1Flie;
public class Filedemo2 {public static void main(String[] args) {printA();}public static void printA(){System.out.println("A");printA();//直接調用,沒有停止條件,無限。棧溢出}
}
public class Filedomo3 {public static void main(String[] args) {//目的:計算階乘System.out.println(f(5));}public static int f(int n){if(n==1){return 1;}return f(n-1)*n;//一遍一遍的去往下調用,到最后一步,然后從最后一步開始返回,最終返回1}
}
4.文件搜索(重要)
package com.item.demo1Flie;import java.io.File;/** 文件搜索:**/
public class Filedemo4 {public static void main(String[] args) {//目標:完成文件搜索,找到D:盤下的QQ.txt文件的位置。File dir=new File("D:/");searchFile(dir,"QQ.txt");}public static void searchFile(File dir,String findName){//1.判斷極端情況if(!dir.exists()|| dir==null||dir.isFile()){return;//不搜索}//2.獲取當前目錄下的所有一級文件或者文件夾File[] files=dir.listFiles();//3.判斷當前是否存在一級文件對象,存在才可以遍歷if(files!=null && files.length>0){//4.遍歷一級文件對象for(File file:files){//5.判斷當前一級文件對象是否是文件if(file.isFile()){//6.判斷文件名是否相同if(file.getName().contains(findName)){System.out.println("找到文件:"+file.getAbsoluteFile());}}else{//7.判斷當前文件是否是文件夾//8.如果是文件夾,則繼續遞歸調用searchFile(file,findName);}}}}
}
package com.item.demo1Flie;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
三、字符集
1. 標準ASCII字符串
定義:美國信息交換標準代碼,包括了英文、符號等。
標準ASCII使用1個字節存儲一個字符,首位是0,因此,總共可表示128個字符。
2.GBK(漢字內碼擴展規范,國標)
定義:漢字編碼字符集,包含2萬多個漢字等字符,GBK中一個中文字符編碼成兩個字節的形式存儲。
注意:GBK兼容了ACII字符集。
GBK規定:漢字的第一個字節的第一位必須是1,漢字占2個字符,英文、數字占1個字節。
3.Unicode字符集(統一碼,也叫萬國碼)
定義:是國際組織制定的,可以容納世界上所有文字、符號的字符集。
UTF-32:我4個字節表示一個字符。
UTF-8(必須掌握):是Unicode字符集的一種編碼方案,采取可變長編碼方案,共分四個長度區:1個字節,2個字節,3個字節,四個字節。
注意:英文字符、數字等只占1個字節(兼容標準ASCII編碼),漢字字符占用3個字節。
UTF-8編碼方式(二進制)
- 1字節:0xxxxxxx
- 2字節:110xxxxx 10xxxxxx
- 3字節:1110xxxx 10xxxxxx 10xxxxxx
- 4字節:11110xxx 10xxxxxx 10xxxxxx
注意1:字符編碼時,使用的字符集,和解碼時使用的字符集必須一致,否則會出現亂碼
注意2:英文,數字一般不會亂碼,因為很多字符集都兼容了ASCII編碼。
4.對字符的編碼
- byte[] getBytes():指定平臺的默認字符集將該String編碼為一系列字節,將結果存儲到一個新的字節數組中。
- byte[] getBytes(String charsetName):使用指定的字符集將該String編碼為一系列字節,將結果存儲到新的字節數組中。
5.對字符的解碼
- String(byte[] bytes):通過使用平臺的默認字符集解碼指定的字節數組來構造新的String。
- String(byte[] bytes,String charsetName):通過指定的字符集解碼指定的字節數組來構造新的String。
代碼演示
public class Filedemo5 {public static void main(String[] args) throws UnsupportedEncodingException {//編碼String name="我愛國";byte[] bytes=name.getBytes();//默認平臺的UTF-8編碼byte[] bytes1=name.getBytes("GBK"); //指定GBK編碼,需要拋出異常System.out.println(bytes.length);//9System.out.println(Arrays.toString(bytes));//[-26, -120, -111, -25, -120, -79, -27, -101, -67]System.out.println(bytes1.length);//6System.out.println(Arrays.toString(bytes1));//[-50, -46, -80, -82, -71, -6]//解碼String name1=new String(bytes);String name2=new String(bytes1,"GBK");System.out.println(name1);//我愛國System.out.println(name2);//我愛國}
}