java 文件路径表达式_Java基础(二十二) Lambda表达式和File类
函數(shù)式編程思想
強(qiáng)調(diào)的是做什么,而不是以什么樣的方式來(lái)做,它忽略了面向?qū)ο蟮膹?fù)雜語(yǔ)法,只要能夠獲取到結(jié)果,誰(shuí)去做的,怎么做的,都不重要,重要的是結(jié)果,不重視過(guò)程。
冗余的Runnable代碼
傳統(tǒng)的寫法:
1 public classDemo01Runnable{2 public static voidmain(String[] args){3 //匿名內(nèi)部類的方式
4 new Thread(newRunnable(){5 @Overrride6 public voidrun(){7 System.out.println("開啟了一個(gè)新的線程");8 }9 } ).start();//啟動(dòng)新線程
10 }11 }
代碼分析:
對(duì)于Runnable的匿名內(nèi)部類用法,可以分析出以下內(nèi)容:
Thread類需要Runnable接口作為參數(shù),其中抽象方法run用來(lái)指定線程任務(wù)內(nèi)容的核心。
為了制定run方法的方法體,不得不需要Runnable接口的實(shí)現(xiàn)類
為了省去定義一個(gè)RunnableImpl實(shí)現(xiàn)類的麻煩,不得不使用匿名內(nèi)部類。
必須重寫抽象方法run方法,所以方法的名稱、方法的參數(shù)、方法的返回值不得不再寫一遍,且不能寫錯(cuò)。
從這里可以看出,只有方法體才是線程任務(wù)的關(guān)鍵性內(nèi)容
編程思想的轉(zhuǎn)換
強(qiáng)調(diào)做什么而不是怎么做
我們真正希望做的事情是:將run方法體內(nèi)的代碼傳遞給Thread類知曉,能夠加載到即可。
傳遞一段代碼———這是我們真正的目的。
我們需要將程序關(guān)注的重點(diǎn)從怎么做回歸到做什么的本質(zhì)上,過(guò)程與形式并不重要。
2014年3月Oracle官方所發(fā)布的Java8(JDK1.8)中,加入了Lambda表達(dá)式
體驗(yàn)Lambda表達(dá)式的更優(yōu)寫法
Java 8的新特性,優(yōu)化剛才的代碼
public classDemo01Runnable{public static voidmain(String[] args){//使用Lambda表達(dá)式的方式
new Thread(()->{
System.out.println("開啟了一個(gè)新的線程");
}
).start();//啟動(dòng)新線程
}
}
從上面的代碼可以看出:沒有創(chuàng)建接口實(shí)現(xiàn)類對(duì)象的操作,不再有抽象方法覆蓋重寫的操作,只寫了線程任務(wù)的內(nèi)容。
從上面的代碼能夠推導(dǎo)出Lambda的語(yǔ)法:
() -> {System.out.println("開啟了一個(gè)新的線程");}
前面的一對(duì)小括號(hào)即run方法,參數(shù)為無(wú),里面是空的,此時(shí)不需要任何的條件
中間的一個(gè)箭頭代表將前面的參數(shù)傳遞給后面的代碼
后面的輸出語(yǔ)句即業(yè)務(wù)邏輯代碼(線程任務(wù)內(nèi)容)
Lambda的標(biāo)準(zhǔn)格式:
格式由三個(gè)部分組成:
一些參數(shù)
一個(gè)箭頭
一段代碼
Lambda表達(dá)式的標(biāo)準(zhǔn)格式:
(參數(shù)類型1 參數(shù)名稱1,參數(shù)類型2 參數(shù)名稱2,...) -> {代碼語(yǔ)句}
格式說(shuō)明:
小括號(hào)內(nèi)的語(yǔ)法與傳統(tǒng)方法參數(shù)列表一致,無(wú)參數(shù)則留空,多個(gè)參數(shù)則用逗號(hào)隔開
->是新引入的語(yǔ)法格式,代表指向的動(dòng)作
大括號(hào)內(nèi)的語(yǔ)法與傳統(tǒng)方法體要求基本一致。
Lambda省略格式
可推導(dǎo)即可省略
Lambda強(qiáng)調(diào)的是"做什么",而不是"怎么做",所以凡是可以根據(jù)上下文推倒得知的信息,都可以省略。比如:
1 invokeSum(3.14, 3.15, (double d1,double d2)->{2 return d1 +d2;3 });4
5 //省略格式表達(dá)
6 invokeSum(3.14,3.15,(d1,d2)->d1 + d2);
省略的規(guī)則:
在Lambda標(biāo)準(zhǔn)格式的表達(dá)式的基礎(chǔ)上,使用省略寫法的規(guī)則是:
小括號(hào)內(nèi)參數(shù)的類型可以省略。
如果小括號(hào)內(nèi)有且僅有一個(gè)參數(shù),則小括號(hào)也可以省略
如果大括號(hào)內(nèi)有且僅有一個(gè)語(yǔ)句,則無(wú)論是否有返回值,都可以省略大括號(hào)、return關(guān)鍵字和語(yǔ)句的分號(hào)。
Lambda的使用前提
Lambda的語(yǔ)法非常的簡(jiǎn)潔,使用非常的簡(jiǎn)單,但是有以下注意事項(xiàng):
1.使用Lambda表達(dá)式必須具有接口,且要求接口中有且僅有一個(gè)抽象方法,無(wú)論JDK內(nèi)置的Runnable、Comparator接口還是自定義的接口,只有當(dāng)接口中的抽象方法存在且唯一,才可以使用Lambda
2.使用Lambda必須具有上下文推斷。也就是方法的參數(shù)或者是局部變量類型必須為L(zhǎng)ambda對(duì)應(yīng)的接口類型,才能使用Lambda作為該接口的實(shí)例。
備注:如果有且僅有一個(gè)抽象方法的接口,稱為函數(shù)式接口。
File類
概述
java.io.File類是文件和目錄路徑名的抽象表示。主要用于文件和目錄的創(chuàng)建、查找、刪除等操作。
Java把電腦中的文件和文件夾(目錄)封裝為了一個(gè)File類,我們可以使用File類對(duì)文件和文件夾進(jìn)行操作。
可以使用File類的方法:
創(chuàng)建一個(gè)文件、文件夾
刪除一個(gè)文件、文件夾
獲取一個(gè)文件、文件夾
判斷文件、文件夾是否存在
對(duì)文件夾進(jìn)行遍歷
獲取文件的大小
File類是一個(gè)與系統(tǒng)無(wú)關(guān)的類,任何的操作系統(tǒng)都可以使用這個(gè)類中的方法。
路徑 :
絕對(duì)路徑:是一個(gè)完整的路徑,一般以盤符(D:,C:,c:)為開頭如:
D:\Developer\Java\jdk1.8.0_191
相對(duì)路徑:是一個(gè)簡(jiǎn)化的路徑,相對(duì)指的是相對(duì)于當(dāng)前項(xiàng)目的根目錄如:(E:\code\workspace\day26_Lambda)
如果使用當(dāng)前項(xiàng)目的根目錄,路徑可以簡(jiǎn)化書寫,E:\code\workspace\day26_Lambda\.classpath ----> 簡(jiǎn)化為:.classpath(可以省略前面項(xiàng)目的根目錄)
注意:
1.路徑是不區(qū)分大小寫;
2.路徑中的文件名稱分隔符windows使用反斜杠(\),反斜杠是轉(zhuǎn)義字符,兩個(gè)反斜杠才代表一個(gè)普通的反斜杠;
構(gòu)造方法
public File(String pathname):通過(guò)將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來(lái)創(chuàng)建一個(gè)新File實(shí)例
public File(String parent, String child) 根據(jù) parent 路徑名字符串和 child 路徑名字符串創(chuàng)建一個(gè)新 File實(shí)例。
public File(File parent ,String child)根據(jù) parent 抽象路徑名和 child 路徑名字符串創(chuàng)建一個(gè)新 File實(shí)例。
常用API方法
獲取功能的方法
判斷功能的方法
路徑功能的方法
創(chuàng)建刪除的方法
目錄遍歷功能的方法
獲取功能的方法
public String getAbsolutePath() 返回此抽象路徑名的絕對(duì)路徑名字符串。
public String getPath(): 將此File轉(zhuǎn)換為路徑名字符串
public String getName() 返回由此抽象路徑名表示的文件或目錄的名稱。
public long length():返回此File表示的文件的長(zhǎng)度。
判斷功能的方法
public boolean exists():判斷File表示的文件或者文件夾是否實(shí)際存在
public boolean isDirectory() 判斷此File表示的文件夾是否存在。
public boolean isFile():判斷此File表示的文件是否存在
創(chuàng)建和刪除文件的方法
public boolean cteateNewFile():當(dāng)且僅當(dāng)具有該名稱的文件不存在時(shí),創(chuàng)建一個(gè)新的空的文件,返回值是true
public boolean delete():刪除由此File表示的文件或者目錄
public boolean mkdir():創(chuàng)建由此File表示的文件夾
public boolean mkdirs():創(chuàng)建由此File表示的文件夾,包括任何必須但是又不存在的父目錄
目錄的遍歷
public String[] list() : 返回一個(gè)String數(shù)組,表示該File目錄中的所有的子目錄或者子文件
public File[] listFile():返回一個(gè)File數(shù)組,表示該File目錄中的所有的子目錄或者子文件。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的java 文件路径表达式_Java基础(二十二) Lambda表达式和File类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信用卡刷卡时间技巧
- 下一篇: java不看答案不会_Java新手必备: