q7goodies事例_Java 8 Friday Goodies:新的新I / O API
q7goodies事例
在Data Geekery ,我們喜歡Java。 而且,由于我們真的很喜歡jOOQ的流暢的API和查詢DSL ,我們對Java 8將為我們的生態系統帶來什么感到非常興奮。 我們已經寫了一些關于Java 8好東西的博客 ,現在我們覺得是時候開始一個新的博客系列了,……
Java 8星期五
每個星期五,我們都會向您展示一些不錯的教程風格的Java 8新功能,這些功能利用了lambda表達式,擴展方法和其他出色的功能。 您可以在GitHub上找到源代碼 。
Java 8 Goodie:新的新I / O API
在本系列的上一篇博客文章中 ,我們主要通過幫助您將java.io.FileFilter實例表示為lambda表達式,展示了Java 8的lambda表達式如何在現有(但已過時)的JDK 1.2 I / O API上進行改進。
許多讀者正確地指出,許多java.io API已被Java 7的java.nio API取代,其中“ N”代表“ New” (我知道。New.Old.Old-2.Old- 2-FIXME。Old-2-TODO ...)。 但是Java 8的情況甚至更好。盡管jOOQ社區成員建議將其稱為“企業IO”,但我們將其稱為“新的新I / O API”(NNIO):
@ lukaseder @ brunoborges @ ponzao為“企業IO” +1(在這種情況下,當然不能正常工作)— Franz van Betteraey(@FrVaBe) 2014年1月15日
回到更具建設性的博客。 讓我們走一小段路程(打算用雙關語,請參見Files.walk() ),了解改進的Java 8 NIO功能。 首先讓我們看看java.nio.Files中的新方法。 實際上,我們終于可以列出Path的內容了,這真是太棒了! 在Java 8中,我們將使用新引入的Files.list() ,它返回文件的惰性流:
Files.list(new File(".").toPath()).forEach(System.out::println);我得到的輸出是這樣的:
.\.git .\.gitignore .\.idea .\java8-goodies.iml .\LICENSE.txt .\pom.xml .\README.txt .\src .\target請記住, forEach()是“終端方法” ,即消耗流的方法。 您不得在此類Stream上調用任何其他方法。
我們還可以跳過所有隱藏文件,僅列出前三個“常規”文件,如下所示:
Files.list(new File(".").toPath()).filter(p -> !p.getFileName().toString().startsWith(".")).limit(3).forEach(System.out::println);我得到的新輸出是這個:
.\java8-goodies.iml .\LICENSE.txt .\pom.xml現在,這已經非常棒了。 會好起來嗎? 是的,它可以。 您還可以使用新的Files.walk()方法進入目錄,從而“遍歷”整個文件層次結構。 這是如何做:
Files.walk(new File(".").toPath()).filter(p -> !p.getFileName().toString().startsWith(".")).forEach(System.out::println);不幸的是,以上方法將創建一個路徑流,其中不包括所有隱藏的文件和目錄,但它們的后代仍然被列出。 這樣我們得到:
Omitted: .\.gitBut listed: .\.git\COMMIT_EDITMSG .\.git\config .\.git\description [...]很容易理解為什么會這樣。 Files.walk()返回所有后代文件的(惰性)流。 對.filter()的調用將刪除從Stream中隱藏的那些,但這對可能適用于walk()實現的任何遞歸算法沒有影響。 坦白說,這有點令人失望。 我們不能利用Java 7的Files.walkFileTree()方法,因為接收的FileVisitor類型不是@FunctionalInterface
但是,我們可以使用以下瑣碎的邏輯來低效地解決此限制:
Files.walk(new File(".").toPath()).filter(p -> !p.toString().contains(File.separator + ".")).forEach(System.out::println);現在產生預期的
. .\java8-goodies.iml .\LICENSE.txt .\pom.xml .\README.txt .\src .\src\main .\src\main\java .\src\main\java\org .\src\main\java\org\jooq [...]好消息是新的Files.lines()方法。 以下示例說明了我們如何輕松地從文件中逐行讀取,修剪每行(刪除縮進)并濾除空白行:
Files.lines(new File("pom.xml").toPath()).map(s -> s.trim()).filter(s -> !s.isEmpty()).forEach(System.out::println);以上收益:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.jooq</groupId> <artifactId>java8-goodies</artifactId> <version>1.0-SNAPSHOT</version> [...]結論
顯然,惰性評估的概念會在社區中引起大量混亂,類似于Stream只能使用一次的事實。 我們敢打賭Java 8 Streams API將成為新的Stack Overflow問題的最大來源。
盡管如此, Streams API還是很棒的 ,下周在Java 8 Friday系列上,我們將看到如何利用lambda表達式和Streams 對事物進行排序 ,然后再了解Java 8將如何改善數據庫交互!
翻譯自: https://www.javacodegeeks.com/2014/01/java-8-friday-goodies-the-new-new-io-apis.html
q7goodies事例
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的q7goodies事例_Java 8 Friday Goodies:新的新I / O API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中备份命令(linux的备份命
- 下一篇: linux端口进程(linux 端口 进