Suche senden
Hochladen
NIO 與 NIO2
•
3 gefällt mir
•
667 views
Justin Lin
Folgen
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
Weniger lesen
Mehr lesen
Technologie
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 66
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
CH14:NIO 與 NIO2
CH14:NIO 與 NIO2
Justin Lin
2011 Java TWO
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
瞭解串流與輸入輸出 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用輸入輸出裝飾器
CH10:輸入輸出
CH10:輸入輸出
Justin Lin
Learn Python in 30 min - 4
Learn Python in 30 min - 4
Learn Python in 30 min - 4
Chia-Hao Tsai
Angular CLI 團隊所開發的 Schematics 工具,讓 Angular 在開發上多了無限的可能性,目前已經有許多的套件都將 schematics 視為標準的操作流程,透過 schematics 來減少程式碼初始化的時間。那企業該如何透過 Schematics 來幫助團隊更有效的開發系統呢,透過本次的分享,能讓大家更能瞭解 Schematics 的奧妙之處
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
Chieh Kai Yang
Empfohlen
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
CH14:NIO 與 NIO2
CH14:NIO 與 NIO2
Justin Lin
2011 Java TWO
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
瞭解串流與輸入輸出 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用輸入輸出裝飾器
CH10:輸入輸出
CH10:輸入輸出
Justin Lin
Learn Python in 30 min - 4
Learn Python in 30 min - 4
Learn Python in 30 min - 4
Chia-Hao Tsai
Angular CLI 團隊所開發的 Schematics 工具,讓 Angular 在開發上多了無限的可能性,目前已經有許多的套件都將 schematics 視為標準的操作流程,透過 schematics 來減少程式碼初始化的時間。那企業該如何透過 Schematics 來幫助團隊更有效的開發系統呢,透過本次的分享,能讓大家更能瞭解 Schematics 的奧妙之處
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
Chieh Kai Yang
flashcache原理及改造
flashcache原理及改造
Hao(Robin) Dong
Java SE 7 技術手冊
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
這是 Will 保哥在「2015 微軟實戰課程日」演講主題【ASP.NET MVC 6 新功能探索】的簡報。
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
講師: 白凱仁 9/21 Kubernetes 開源容器技術論壇
Kubernetes project update and how to contribute
Kubernetes project update and how to contribute
inwin stack
筆者介紹了全新的 Visual Studio 2015 與 為什麼要重新設計 ASP.NET ,以及和 MVC 6 之間的關係。也介紹了 bower 、grunt 是什麼?與如何使用。還有 MVC 6 的有那些新增功能。
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
Angular 最棒的地方除了框架穩定性高、執行速度快、進入門檻低之外,更有大量的開發工具支援,幫助前端開發人員可以建構出容易維護的網站應用程式。我們最近一年累積了不少開發經驗,也了解到所謂的「最佳實務」也需要與時俱進,本次演說將帶來 Angular 網站開發現場的一手資訊,幫助各位掌握最重要的 Angular 開發技巧與觀念。
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
Will Huang
本簡報是 Will 保哥在 TechDays Taiwan 2015 的演講內容。 課程代號: DEV305 課程主題: ASP.NET 5 開發攻略 課程說明: ASP.NET 5 是一個跨平台的開放原始碼程式框架,在本課程中,除了介紹有關 ASP.NET 5 的最新資訊外,也會介紹ASP.NET的跨平台特性,讓你的ASP.NET 5應用程式在不同作業系統之間也能順利運作,對身為開發人員的你來說,必修課就在這! 課程等級: 300
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
使用 Gradle 結合 Gradle 與 IDE 認識相依注入 使用 Spring 核心
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
寄送純文字郵件 寄送 HTML 郵件 寄送附檔郵件
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
了解 Java EE 安全概念與名詞 使用容器基本驗證與表單驗 使用 HTTPS 保密資料傳輸
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
了解何謂 JSTL 使用 JSTL 核心標籤庫 使用 JSTL 格式標籤庫 使用 JSTL XML 標籤庫 使用 JSTL 函式標籤庫
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
了解 JSP 生命週期 使用 JSP 語法元素 使用 JSP 標準標籤 使用運算式語言(EL) 自訂 EL 函式
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
了解 Servlet 生命週期 使用 ServletConfig 與ServletContext 使用 PushBuilder 各種傾聽器的使用 繼承 HttpFilter 實作過濾器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
了解會話管理基本原理 使用 Cookie 類別 使用 HttpSession 會話管理 了解容器會話管理原理
Ch04 會話管理
Ch04 會話管理
Justin Lin
取得請求參數與標頭 處理中文字元請求與回應 設定與取得請求範圍屬性 使用轉發、包含、重新導向
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
開發環境準備與使用 了解 Web 應用程式架構 Servlet 撰寫與部署設定 了解 URI 模式對應 使用 web-fragement.xml
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
認識 HTTP 基本特性 了解何為 URI 編碼 認識 Web 容器角色 了解 Servlet 與 JSP 的關係 認識 MVC/Model 2
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
14. 進階主題
14. 進階主題
Justin Lin
Weitere ähnliche Inhalte
Ähnlich wie NIO 與 NIO2
flashcache原理及改造
flashcache原理及改造
Hao(Robin) Dong
Java SE 7 技術手冊
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
這是 Will 保哥在「2015 微軟實戰課程日」演講主題【ASP.NET MVC 6 新功能探索】的簡報。
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
講師: 白凱仁 9/21 Kubernetes 開源容器技術論壇
Kubernetes project update and how to contribute
Kubernetes project update and how to contribute
inwin stack
筆者介紹了全新的 Visual Studio 2015 與 為什麼要重新設計 ASP.NET ,以及和 MVC 6 之間的關係。也介紹了 bower 、grunt 是什麼?與如何使用。還有 MVC 6 的有那些新增功能。
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
Angular 最棒的地方除了框架穩定性高、執行速度快、進入門檻低之外,更有大量的開發工具支援,幫助前端開發人員可以建構出容易維護的網站應用程式。我們最近一年累積了不少開發經驗,也了解到所謂的「最佳實務」也需要與時俱進,本次演說將帶來 Angular 網站開發現場的一手資訊,幫助各位掌握最重要的 Angular 開發技巧與觀念。
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
Will Huang
本簡報是 Will 保哥在 TechDays Taiwan 2015 的演講內容。 課程代號: DEV305 課程主題: ASP.NET 5 開發攻略 課程說明: ASP.NET 5 是一個跨平台的開放原始碼程式框架,在本課程中,除了介紹有關 ASP.NET 5 的最新資訊外,也會介紹ASP.NET的跨平台特性,讓你的ASP.NET 5應用程式在不同作業系統之間也能順利運作,對身為開發人員的你來說,必修課就在這! 課程等級: 300
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
Ähnlich wie NIO 與 NIO2
(7)
flashcache原理及改造
flashcache原理及改造
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Kubernetes project update and how to contribute
Kubernetes project update and how to contribute
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Mehr von Justin Lin
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
使用 Gradle 結合 Gradle 與 IDE 認識相依注入 使用 Spring 核心
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
寄送純文字郵件 寄送 HTML 郵件 寄送附檔郵件
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
了解 Java EE 安全概念與名詞 使用容器基本驗證與表單驗 使用 HTTPS 保密資料傳輸
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
了解何謂 JSTL 使用 JSTL 核心標籤庫 使用 JSTL 格式標籤庫 使用 JSTL XML 標籤庫 使用 JSTL 函式標籤庫
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
了解 JSP 生命週期 使用 JSP 語法元素 使用 JSP 標準標籤 使用運算式語言(EL) 自訂 EL 函式
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
了解 Servlet 生命週期 使用 ServletConfig 與ServletContext 使用 PushBuilder 各種傾聽器的使用 繼承 HttpFilter 實作過濾器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
了解會話管理基本原理 使用 Cookie 類別 使用 HttpSession 會話管理 了解容器會話管理原理
Ch04 會話管理
Ch04 會話管理
Justin Lin
取得請求參數與標頭 處理中文字元請求與回應 設定與取得請求範圍屬性 使用轉發、包含、重新導向
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
開發環境準備與使用 了解 Web 應用程式架構 Servlet 撰寫與部署設定 了解 URI 模式對應 使用 web-fragement.xml
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
認識 HTTP 基本特性 了解何為 URI 編碼 認識 Web 容器角色 了解 Servlet 與 JSP 的關係 認識 MVC/Model 2
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
14. 進階主題
14. 進階主題
Justin Lin
認識並行、平行與非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
使用 pdb 模組除錯 對程式進行單元測試 使用 timeit 評測程式片段 使用 cProfile(profile)察看評測數據
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
處理日期與時間 認識日誌的使用 運用規則表示式 管理檔案與目錄 URL 處理
11. 常用內建模組
11. 常用內建模組
Justin Lin
認識 hashable、iterable、orderable 對物件進行排序 認識群集架構 運用 collections 模組 運用 collections.abc 模組
9. 資料結構
9. 資料結構
Justin Lin
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
Mehr von Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Ch09 整合資料庫
Ch09 整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch04 會話管理
Ch04 會話管理
Ch03 請求與回應
Ch03 請求與回應
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
14. 進階主題
14. 進階主題
13.並行、平行與非同步
13.並行、平行與非同步
12. 除錯、測試與效能
12. 除錯、測試與效能
11. 常用內建模組
11. 常用內建模組
9. 資料結構
9. 資料結構
8. open() 與 io 模組
8. open() 與 io 模組
NIO 與 NIO2
1.
1
2.
NIO 與 NIO2 學習目標 •
認識NIO • 使用Channel與Buffer • 使用NIO2檔案系統 2
3.
NIO概觀 • 在10.1.1中看過的dump()方法 3
4.
NIO概觀 • 若使用NIO的話,可以如下撰寫: 4
5.
Channel架構與操作 5
6.
Channel架構與操作 • 想要取得Channel的實作物件,可以使用 Channels類別 • 靜態方法newChannel(),可以讓你從 InputStream、OutputStream分別建立 ReadableByteChannel、 WritableByteChannel 6
7.
Channel架構與操作 • 有些InputStream、OutputStream實例 本身也有方法可以取得Channel實例 • FileInputSteam、FileOutputStream 都有個getChannel()方法可以分別取得 FileChannel實例 7
8.
Channel架構與操作 • 已經有相關的Channel實例,也可以透過 Channels上其他newXXX()靜態方法,取 得InputStream、OutputStream、 Reader、Writer實例 8
9.
Buffer架構與操作 9
10.
Buffer架構與操作 • 容量、界限與存取位置 • clear()、flip()與rewind() •
mark()、reset()、remaining() 10
11.
Buffer架構與操作 • Buffer的直接子類別們都有個allocate() 靜態方法,可以讓你指定Buffer容量 (Capacity) • 如果想取得Buffer內部的陣列,可以使用 array()方法 •
陣列想要轉為某個Buffer子類實例,每個 Buffer子類別實例都有wrap()靜態方法 11
12.
Buffer架構與操作 • ByteBuffer還有一個allocateDirect() 方法 • 會利用作業系統的原生I/O操作,試著避免 JVM的中介轉接 •
建議用在大型、存活長的ByteBuffer物件 12
13.
Buffer架構與操作 • Buffer是容器,填裝資料不會超過它的容量 • 實際可讀取或寫入的資料界限(Limit)索引 值可以由limit()方法得知或設定 •
下一個可讀取資料的位置(Position)索引值, 可以使用position()方法得知或設定 13
14.
Buffer架構與操作 • ByteBuffer初建立或呼叫clear() 14
15.
Buffer架構與操作 • ByteBuffer被寫入了16位元組 15
16.
Buffer架構與操作 • ByteBuffer呼叫了flip()方法 16
17.
17
18.
Buffer架構與操作 • 呼叫rewind()方法的話,會將position設為0, 而limit不變 • 這個方法通常用在想要重複讀取Buffer中某 段資料時使用,作用相當於單獨呼叫Buffer 的position(0)方法。 18
19.
NIO2檔案系統 • JDK7在java.nio.file、 java.nio.file.attribute與 java.nio.file.spi套件中,提供了存取 預設檔案系統進行各種輸入輸出的API – 簡化現有檔案輸入輸出API的操作 –
增加許多過去沒有提供的檔案系統存取功能 19
20.
概述API架構 20
21.
概述API架構 21
22.
概述API架構 • 應用程式開發者可以透過java.nio.file 套件中FileSystems、Paths、Files等 類別提供的靜態方法,取得相關實作物件或 進行各種檔案系統操作 • 這些靜態方法內部會運用 FileSystemProvider來取得所需的實作 物件,完成應有的操作 22
23.
概述API架構 • 想要取得java.nio.file.FileSystem實 作物件: • 可以使用系統屬性 "java.nio.file.spi.DefaultFileSystemProvider"指 定該廠商實作的類別名稱 23
24.
操作路徑 • Path實例是在JVM中路徑的代表物件,也是 NIO2檔案系統API操作的起點 • Paths.get()的第二個參數開始接受不定 長度引數 24
25.
操作路徑 • Path實例僅代表路徑資訊,路徑實際對應的 檔案或資料夾(也是一種檔案)不一定存在 • Path提供一些方法取得路徑的各種資訊 25
26.
操作路徑 • Path實作了Iterable介面 • 路徑中若有冗餘資訊,可以使用 normalize()方法移除 26
27.
操作路徑 • toAbsolutePath()方法可以將(相對路 徑)Path轉為絕對路徑Path • 如果路徑是符號連結(Symbolic
link), toRealPath()可以轉換為真正的路徑,若 是相對路徑則轉換為絕對路徑,若路徑中有 冗餘資訊也會移除 27
28.
操作路徑 • 路徑與路徑可以使用resolve()結合。例如 以下最後得到代表C:UsersJustin的Path實例: 28
29.
操作路徑 • 想知道如何從一個路徑切換至另一路徑,則 可以使用relativize()方法 29
30.
操作路徑 • 使用equals()方法比較兩個Path實例的路 徑是否相同 • 使用startsWith()比較路徑起始是否相同 •
使用endsWith()比較路徑結尾是否相同 • 如果檔案系統支援符號連結,兩個路徑不同 的Path實例,有可能是指向同一檔案 – 可以使用Files.isSameFile()測試看看是否 如此 30
31.
操作路徑 • 想確定Path代表的路徑,實際上是否存在檔 案,可以使用Files.exists()或 Files.notExists() – Files.exists()僅在檔案存在時傳回true, 如果檔案不存在或無法確認存不存在(例如沒有 權限存取檔案)則傳回false –
Files.notExists()會在檔案不存在時傳回 true,如果檔案存在或無法確認存不存在則傳 回false 31
32.
操作路徑 • 對於檔案的一些基本屬性,可以使用Files 的isExecutable()、isHidden()、 isReadable()、isRegularFile()、 isSymbolicLink()、isWritable()等 方法來得知 • 如果需要更多檔案屬性資訊,則必須透過 BasicFileAttributes或搭配 FileAttributeView來取得 32
33.
屬性讀取與設定 33
34.
屬性讀取與設定 34
35.
屬性讀取與設定 • creationTime()、lastAccessTime()、 lastModifiedTime()傳回的是FileTime實例, 也可以透過Files.getLastModifiedTime()取 得最後修改時間 • 若想設定最後修改時間,可以透過 Files.setLastModifiedTime()指定代表修改 時間的FileTime實例: 35
36.
屬性讀取與設定 • 屬性設定可透過Files.setAttribute()方法。 例如設定檔案為隱藏: • Files.setAttribute()第二個引數必須指定 FileAttributeView子介面規範的名稱,格式為 [view-name:]attribute-name –
view-name可以從FileAttributeView子介面實作物件 的name()方法取得(亦可查看API文件),如果省略就 預設為“basic” – attribute-name可在FileAttributeView各子介面的 API文件中查詢 36
37.
屬性讀取與設定 • 例如同樣設定最後修改時間,改用 Files.setAttributes()可以如下撰寫: 37
38.
屬性讀取與設定 • 可以透過Files.getAttribute()方法取 得各種檔案屬性,使用方式類似 setAttributes() • 也可透過Files.readAttributes()另一 版本取得Map<String,
Object>物件,鍵 部份指定屬性名稱,就可以取得屬性值 38
39.
屬性讀取與設定 • 可以如下取得DosFileAttributes實例: 39
40.
屬性讀取與設定 • 如果想取得儲存裝置本身的資訊,可以利用 Files.getFileStore()方法取得指定路 徑的FileStore實例 • 或透過FileSystem的getFileStores() 方法取得所有儲存裝置的FileStore實例 40
41.
41
42.
操作檔案與目錄 • 想要刪除Path代表的檔案或目錄,可以使用 Files.delete()方法 – 如果不存在,會拋出NoSuchFileException –
如果因目錄不為空而無法刪除檔案,會拋出 DirectoryNotEmptyException • 使用Files.deleteIfExists()方法也可 以刪除檔案,這個方法在檔案不存在時呼叫, 並不會拋出例外 42
43.
操作檔案與目錄 • 如果想要複製來源Path的檔案或目錄至目的地 Path,可以使用Files.copy()方法 – 第三個選項可以指定CopyOption介面的實作物件, CopyOption實作類別有以Enum型態實作的 StandardCopyOption與LinkOption –
StandardCopyOption的REPLACE_EXISTING實例進 行複製時,若目標檔案已存在就會予以覆蓋, COPY_ATTRIBUTES會嘗試複製相關屬性 – LinkOption的NOFOLLOW_LINKS則不會跟隨符號連結 43
44.
操作檔案與目錄 • 一個使用Files.copy()的範例如下: • Files.copy()還有重載兩個版本 –
接受InputStream作為來源,可直接讀取資料, 並將結果複製至指定的Path中 – 將來源Path複製至指定的OutputStream 44
45.
操作檔案與目錄 • 可改寫10.1.1中的Download為以下: 45
46.
操作檔案與目錄 • 若要進行檔案或目錄移動,可以使用 Files.move()方法 • 如果要建立目錄,可以使用 Files.createDirectory()方法,如果呼叫時 父目錄不存在,會拋出NoSuchFileException •
Files.createDirectories()會在父目錄不存 在時一併建立 • 如果要建立暫存目錄,可以使用Files. createTempDirectory()方法 46
47.
操作檔案與目錄 • 對於java.io中的基本輸入輸出API,NIO2 也作了封裝 – 可使用Files.readAllBytes()讀取整個檔案, 然後以byte[]傳回檔案內容 –
如果檔案內容都是字元,則可使用 Files.readAllLines()指定檔案Path與編 碼,讀取整個檔案,將檔案中每行收集在 List<String>中傳回 47
48.
操作檔案與目錄 • 如果本來有個建立BufferedReader的片段 如下: • 可使用Files.newBufferedReader()改 寫如下: 48
49.
操作檔案與目錄 • 如果想要以InputStream、 OutputStream處理檔案,也有對應的 Files.newInputStream()、 Files.newOutputStream()可以使用 49
50.
讀取、走訪目錄 • 如果想要取得檔案系統根目錄路徑資訊,可 以使用FileSystem的 getRootDirectories()方法 50
51.
讀取、走訪目錄 • 可以使用Files.newDirectoryStream() 方法取得DirectoryStream介面實作物件, 代表指定路徑下的所有檔案 • 在不使用DirectoryStream物件時必須使 用close()方法關閉相關資源 •
DirectoryStream繼承了Closeable介面, 其父介面為AutoClosable介面,所以可搭 配嘗試關閉資源語法來簡化程式撰寫 51
52.
讀取、走訪目錄 • Files.newDirectoryStream()實際傳 回的是DirectoryStream<Path> • DirectoryStream也繼承了Iterable介 面,所以可使用增強式for迴圈語法來逐一 取得Path 52
53.
讀取、走訪目錄 53
54.
讀取、走訪目錄 • 如果想要走訪目錄中所有檔案與子目錄,可 以實作FileVisitor介面 54
55.
讀取、走訪目錄 55
56.
讀取、走訪目錄 • 可以繼承SimpleFileVisitor類別,這個 類別實作了FileVisitor介面,你只要繼 承之後重新定義感興趣的方法就可以了 56
57.
57
58.
讀取、走訪目錄 • 如果要使用FileVisitor走訪目錄,可以 使用Files.walkFileTree()方法: 58
59.
讀取、走訪目錄 • Files新增了list()與walk()靜態方法, 它傳回的是Stream<Path> • lines()、list()與walk()傳回的 Stream不使用時需要呼叫close()方法來 釋放資源 59
60.
過濾、搜尋檔案 • 想顯示.class與.jar檔案: • 像*.{class,jar}這樣的語法稱之為Glob 60
61.
過濾、搜尋檔案 61
62.
過濾、搜尋檔案 • *.java比對.java結尾的字串。 • **/*Test.java跨目錄比對Test.java結尾的字串, 例如BookmarkTest.java、CommandTest.java都符合。 •
???符合三個字元,例如123、abc會符合。 • a?*.java比對a之後至少一個字元,並以.java結尾 的字串。 • *.{class,jar}符合.class或.jar結尾的字串。 • *[0-9]*比對的字串中要有一個數字。 • {*[0-9]*,*.java}比對字串中要有一個數字, 或者是.java結尾。 62
63.
過濾、搜尋檔案 63
64.
過濾、搜尋檔案 • 如果Glob語法無法滿足條件過濾需求時,可 以自行實作DirectoryStream.Filter的 accept()方法自訂過濾條件 64
65.
過濾、搜尋檔案 • 可以使用FileSystem實例的 getPathMatcher()取得PathMatcher介 面實作物件 – 可以指定使用哪種模式比對語法,"regex"表示 使用規則表示式語法、"glob"表示Glob語法 65
66.
66
Jetzt herunterladen