Submit Search
Upload
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
•
Download as PPT, PDF
•
15 likes
•
5,603 views
Justin Lin
Follow
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
Read less
Read more
Technology
Report
Share
Report
Share
1 of 66
Download now
Recommended
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
Funnelll
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
CH12:Lambda
CH12:Lambda
Justin Lin
Shougoの開発環境
Shougoの開発環境
Shougo
Springboot introduction
Springboot introduction
Sagar Verma
Spring Boot
Spring Boot
HongSeong Jeon
An Introduction to Maven
An Introduction to Maven
Vadym Lotar
Recommended
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
Funnelll
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
CH12:Lambda
CH12:Lambda
Justin Lin
Shougoの開発環境
Shougoの開発環境
Shougo
Springboot introduction
Springboot introduction
Sagar Verma
Spring Boot
Spring Boot
HongSeong Jeon
An Introduction to Maven
An Introduction to Maven
Vadym Lotar
如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件
Mu Chun Wang
Spring boot - an introduction
Spring boot - an introduction
Jonathan Holloway
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
Kris Mok
Gephi Toolkit Tutorial
Gephi Toolkit Tutorial
Gephi Consortium
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Yoshiro Tokumasu
Core Java
Core Java
Prakash Dimmita
GraalVM: Run Programs Faster Everywhere
GraalVM: Run Programs Faster Everywhere
J On The Beach
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
DEEPAK KHETAWAT
Spring & hibernate
Spring & hibernate
Santosh Kumar Kar
Spring Boot in Action
Spring Boot in Action
Alex Movila
Completable future
Completable future
Srinivasan Raghvan
The JVM is your friend
The JVM is your friend
Kai Koenig
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Maven tutorial
Maven tutorial
Dragos Balan
Sublime text 極速應用教學
Sublime text 極速應用教學
Amos Lee
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
Pekka Klärck
Memory Management in the Java Virtual Machine(Garbage collection)
Memory Management in the Java Virtual Machine(Garbage collection)
Prashanth Kumar
Angular.pdf
Angular.pdf
Jaouad Assabbour
Spring batch for large enterprises operations
Spring batch for large enterprises operations
Ignasi González
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
More Related Content
What's hot
如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件
Mu Chun Wang
Spring boot - an introduction
Spring boot - an introduction
Jonathan Holloway
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
Kris Mok
Gephi Toolkit Tutorial
Gephi Toolkit Tutorial
Gephi Consortium
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Yoshiro Tokumasu
Core Java
Core Java
Prakash Dimmita
GraalVM: Run Programs Faster Everywhere
GraalVM: Run Programs Faster Everywhere
J On The Beach
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
DEEPAK KHETAWAT
Spring & hibernate
Spring & hibernate
Santosh Kumar Kar
Spring Boot in Action
Spring Boot in Action
Alex Movila
Completable future
Completable future
Srinivasan Raghvan
The JVM is your friend
The JVM is your friend
Kai Koenig
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Maven tutorial
Maven tutorial
Dragos Balan
Sublime text 極速應用教學
Sublime text 極速應用教學
Amos Lee
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
Pekka Klärck
Memory Management in the Java Virtual Machine(Garbage collection)
Memory Management in the Java Virtual Machine(Garbage collection)
Prashanth Kumar
Angular.pdf
Angular.pdf
Jaouad Assabbour
Spring batch for large enterprises operations
Spring batch for large enterprises operations
Ignasi González
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
What's hot
(20)
如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件
Spring boot - an introduction
Spring boot - an introduction
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
Gephi Toolkit Tutorial
Gephi Toolkit Tutorial
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Core Java
Core Java
GraalVM: Run Programs Faster Everywhere
GraalVM: Run Programs Faster Everywhere
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
Spring & hibernate
Spring & hibernate
Spring Boot in Action
Spring Boot in Action
Completable future
Completable future
The JVM is your friend
The JVM is your friend
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Maven tutorial
Maven tutorial
Sublime text 極速應用教學
Sublime text 極速應用教學
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
Memory Management in the Java Virtual Machine(Garbage collection)
Memory Management in the Java Virtual Machine(Garbage collection)
Angular.pdf
Angular.pdf
Spring batch for large enterprises operations
Spring batch for large enterprises operations
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Viewers also liked
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 13 章 - 時間與日期
Justin Lin
Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 7 章 - 介面與多型
Justin Lin
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
Justin Lin
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
JDK8 Functional API
JDK8 Functional API
Justin Lin
進階主題
進階主題
Justin Lin
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
Viewers also liked
(20)
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
從 REPL 到 IDE
從 REPL 到 IDE
JDK8 Functional API
JDK8 Functional API
進階主題
進階主題
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Similar to Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
NIO 與 NIO2
NIO 與 NIO2
Justin Lin
CH14:NIO 與 NIO2
CH14:NIO 與 NIO2
Justin Lin
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
CH10:輸入輸出
CH10:輸入輸出
Justin Lin
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3
ArBing Xie
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Justin Lin
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
Chieh Kai Yang
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
2, OCP - installing and creating a database
2, OCP - installing and creating a database
ted-xu
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
Io 2
Io 2
Medivh2011
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
孙立
Web scraping入門1
Web scraping入門1
兆欽 丘
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
tidesq
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Justin Lin
Lucene实践
Lucene实践
晓锋 陈
Similar to Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
(20)
NIO 與 NIO2
NIO 與 NIO2
CH14:NIO 與 NIO2
CH14:NIO 與 NIO2
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
CH10:輸入輸出
CH10:輸入輸出
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
2, OCP - installing and creating a database
2, OCP - installing and creating a database
Ch09 整合資料庫
Ch09 整合資料庫
Io 2
Io 2
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
Web scraping入門1
Web scraping入門1
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Lucene实践
Lucene实践
More from Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch04 會話管理
Ch04 會話管理
Justin Lin
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
14. 進階主題
14. 進階主題
Justin Lin
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
11. 常用內建模組
11. 常用內建模組
Justin Lin
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
9. 資料結構
9. 資料結構
Justin Lin
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
More from 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 容器安全管理
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. 常用內建模組
10. 資料永續與交換
10. 資料永續與交換
9. 資料結構
9. 資料結構
8. open() 與 io 模組
8. open() 與 io 模組
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
1.
2.
NIO 與 NIO2 學習目標 •
認識 NIO • 使用 Channel 與 Buffer • 使用 NIO2 案系統檔
3.
NIO 概觀 • 在
10.1.1 中看過的 dump() 方法
4.
NIO 概觀 • 若使用
NIO 的話,可以如下撰寫:
5.
Channel 架構與操作
6.
Channel 架構與操作 • 想要取得
Channel 的實作物件,可以使用 Channels 類別 • 靜態方法 newChannel() ,可以讓你從 InputStream 、 OutputStream 分別建立 ReadableByteChannel 、 WritableByt eChannel
7.
Channel 架構與操作 • 有些
InputStream 、 OutputStream 實 例本身也有方法可以取得 Channel 實例 • FileInputSteam 、 FileOutputStream 都有個 getChannel() 方法可以分別取得 FileChannel 實例
8.
Channel 架構與操作 • 已經有相關的
Channel 實例,也可以透過 Channels 上其他 newXXX() 靜態方法,取 得 InputStream 、 OutputStream 、 Read er 、 Writer 實例
9.
Buffer 架構與操作
10.
Buffer 架構與操作 • 容量、界限與存取位置 •
clear() 、 flip() 與 rewind() • mark() 、 reset() 、 remaining()
11.
Buffer 架構與操作 • Buffer
的直接子類別們都有個 allocate() 靜態方法,可以讓你指定 Buffer 容量( Capacity ) • 如果想取得 Buffer 內部的陣列,可以使用 array() 方法 • 陣列想要轉為某個 Buffer 子類實例,每個 Buffer 子類別實例都有 wrap() 靜態方法
12.
Buffer 架構與操作 • ByteBuffer
還有一個 allocateDirect() 方法 • 會利用作業系統的原生 I/O 操作,試著避免 JVM 的中介轉接 • 建議用在大型、存活長的 ByteBuffer 物件
13.
Buffer 架構與操作 • Buffer
是容器,填裝資料不會超過它的容 量 • 實際可讀取或寫入的資料界限( Limit )索 引 可以由值 limit() 方法得知或設定 • 下一個可讀取資料的位置( Position )索引 ,可以使用值 position() 方法得知或設定
14.
Buffer 架構與操作 • ByteBuffer
初建立或呼叫 clear()
15.
Buffer 架構與操作 • ByteBuffer
被寫入了 16 位元組
16.
Buffer 架構與操作 • ByteBuffer
呼叫了 flip() 方法
17.
18.
Buffer 架構與操作 • 呼叫
rewind() 方法的話,會將 position 設 為 0 ,而 limit 不變 • 這個方法通常用在想要重複讀取 Buffer 中 某段資料時使用,作用相當於單獨呼叫 Buffer 的 position(0) 方法。
19.
NIO2 案系統檔 • JDK7
在 java.nio.file 、 java.nio.file.attribute 與 java.nio.file.spi 套件中,提供了存取 預設 案系統進行各種輸入輸出的檔 API – 簡化現有 案輸入輸出檔 API 的操作 – 增加許多過去沒有提供的 案系統存取功能檔
20.
概述 API 架構
21.
概述 API 架構
22.
概述 API 架構 •
應用程式開發者可以透過 java.nio.file 套件中 FileSystems 、 Paths 、 Files 等類別提供的靜態方法,取得相關實作物件 或進行各種 案系統操作檔 • 這些靜態方法內部會運用 FileSystemProvider 來取得所需的實作 物件,完成應有的操作
23.
概述 API 架構 •
想要取得 java.nio.file.FileSystem 實作物件: • 可以使用系統屬 性 "java.nio.file.spi.DefaultFileSystemProvider" 指定該廠商實作的類別名稱
24.
操作路徑 • Path 實例是在
JVM 中路徑的代表物件,也 是 NIO2 案系統檔 API 操作的起點 • Paths.get() 的第二個參數開始接受不定 長度引數
25.
操作路徑 • Path 實例僅代表路徑資訊,路徑實際對應 的
案或資料夾(也是一種 案)不一定存檔 檔 在 • Path 提供一些方法取得路徑的各種資訊
26.
操作路徑 • Path 實作了
Iterable 介面 • 路徑中若有冗餘資訊,可以使用 normalize() 方法移除
27.
操作路徑 • toAbsolutePath() 方法可以將(相對路 徑)
Path 轉為絕對路徑 Path • 如果路徑是符號連結( Symbolic link ), toRealPath() 可以轉換為真正的 路徑,若是相對路徑則轉換為絕對路徑,若 路徑中有冗餘資訊也會移除
28.
操作路徑 • 路徑與路徑可以使用 resolve()
結合。例 如以下最後得到代表 C:UsersJustin 的 Path 實例:
29.
操作路徑 • 想知道如何從一個路徑切換至另一路徑,則 可以使用 relativize()
方法
30.
操作路徑 • 使用 equals()
方法比較兩個 Path 實例的 路徑是否相同 • 使用 startsWith() 比較路徑起始是否相 同 • 使用 endsWith() 比較路徑結尾是否相同 • 如果 案系統支援符號連結,兩個路徑不同檔 的 Path 實例,有可能是指向同一 案檔 – 可以使用 Files.isSameFile() 測試看看是否 如此
31.
操作路徑 • 想確定 Path
代表的路徑,實際上是否存在 案,可以使用檔 Files.exists() 或 Files.notExists() – Files.exists() 僅在 案存在時傳回檔 true ,如果 案不存在或無法確認存不存在檔 (例如沒有權限存取 案)則傳回檔 false – Files.notExists() 會在 案不存在時傳回檔 true ,如果 案存在或無法確認存不存在則傳檔 回 false
32.
操作路徑 • 對於 案的一些基本屬性,可以使用檔
Files 的 isExecutable() 、 isHidden() 、 isR eadable() 、 isRegularFile() 、 isS ymbolicLink() 、 isWritable() 等方 法來得知 • 如果需要更多 案屬性資訊,則必須透過檔 BasicFileAttributes 或搭配 FileAttributeView 來取得
33.
屬性讀取與設定
34.
屬性讀取與設定
35.
屬性讀取與設定 • creationTime() 、
lastAccessTime() 、 la stModifiedTime() 傳回的是 FileTime 實例, 也可以透過 Files.getLastModifiedTime() 取得最後修改時間 • 若想設定最後修改時間,可以透過 Files.setLastModifiedTime() 指定代表修 改時間的 FileTime 實例:
36.
屬性讀取與設定 • 屬性設定可透過 Files.setAttribute()
方法。 例如設定 案為隱藏:檔 • Files.setAttribute() 第二個引數必須指定 FileAttributeView 子介面規範的名稱,格式 為 [view-name:]attribute-name – view-name 可以從 FileAttributeView 子介面實作物 件的 name() 方法取得(亦可 看查 API 文件),如果省 略就預設為“ basic” – attribute-name 可在 FileAttributeView 各子介面的 API 文件中 詢查
37.
屬性讀取與設定 • 例如同樣設定最後修改時間,改用 Files.setAttributes() 可以如下撰寫 :
38.
屬性讀取與設定 • 可以透過 Files.getAttribute()
方法取 得各種 案屬性,使用方式類似檔 setAttributes() • 也可透過 Files.readAttributes() 另 一版本取得 Map<String, Object> 物件 ,鍵部份指定屬性名稱,就可以取得屬性值
39.
屬性讀取與設定 • 可以如下取得 DosFileAttributes
實例 :
40.
屬性讀取與設定 • 如果想取得儲存裝置本身的資訊,可以利用 Files.getFileStore() 方法取得指定路 徑的
FileStore 實例 • 或透過 FileSystem 的 getFileStores() 方法取得所有儲存裝置 的 FileStore 實例
41.
42.
操作 案與目檔 錄 •
想要刪除 Path 代表的 案或目錄,可以使檔 用 Files.delete() 方法 – 如果不存在,會 出拋 NoSuchFileException – 如果因目錄不為空而無法刪除 案,會 出檔 拋 DirectoryNotEmptyException • 使用 Files.deleteIfExists() 方法也 可以刪除 案,這個方法在 案不存在時呼檔 檔 叫,並不會 出例外拋
43.
操作 案與目檔 錄 •
如果想要複製來源 Path 的 案或目錄至目的地檔 Path ,可以使用 Files.copy() 方法 – 第三個選項可以指定 CopyOption 介面的實作物 件, CopyOption 實作類別有以 Enum 型態實作的 StandardCopyOption 與 LinkOption – StandardCopyOption 的 REPLACE_EXISTING 實例 進行複製時,若目標 案已存在就會予以覆檔 蓋, COPY_ATTRIBUTES 會嘗試複製相關屬性 – LinkOption 的 NOFOLLOW_LINKS 則不會跟隨符號連 結
44.
操作 案與目檔 錄 •
一個使用 Files.copy() 的範例如下: • Files.copy() 還有重載兩個版本 – 接受 InputStream 作為來源,可直接讀取資料 ,並將結果複製至指定的 Path 中 – 將來源 Path 複製至指定的 OutputStream
45.
操作 案與目檔 錄 •
可改寫 10.1.1 中的 Download 為以下:
46.
操作 案與目檔 錄 •
若要進行 案或目錄移動,可以使用檔 Files.move() 方法 • 如果要建立目錄,可以使用 Files.createDirectory() 方法,如果呼叫時 父目錄不存在,會 出拋 NoSuchFileException • Files.createDirectories() 會在父目錄不存 在時一併建立 • 如果要建立暫存目錄,可以使用 Files. createTempDirectory() 方法
47.
操作 案與目檔 錄 •
對於 java.io 中的基本輸入輸出 API , NIO2 也作了封裝 – 可使用 Files.readAllBytes() 讀取整個檔 案,然後以 byte[] 傳回 案內容檔 – 如果 案內容都是字元,則可使用檔 Files.readAllLines() 指定 案檔 Path 與編 碼,讀取整個 案,將 案中每行收集在檔 檔 List<String> 中傳回
48.
操作 案與目檔 錄 •
如果本來有個建立 BufferedReader 的片 段如下: • 可使用 Files.newBufferedReader() 改 寫如下:
49.
操作 案與目檔 錄 •
如果想要以 InputStream 、 OutputStream 處理 案檔 ,也有對應的 Files.newInputStream() 、 Files.ne wOutputStream() 可以使用
50.
讀取、走訪目錄 • 如果想要取得 案系統根目錄路徑資訊,可檔 以使用
FileSystem 的 getRootDirectories() 方法
51.
讀取、走訪目錄 • 可以使用 Files.newDirectoryStream() 方法取 得
DirectoryStream 介面實作物件,代表 指定路徑下的所有 案檔 • 在不使用 DirectoryStream 物件時必須使 用 close() 方法關閉相關資源 • DirectoryStream 繼承了 Closeable 介 面,其父介面為 AutoClosable 介面,所 以可搭配嘗試關閉資源語法來簡化程式撰寫
52.
讀取、走訪目錄 • Files.newDirectoryStream() 實際傳 回的是
DirectoryStream<Path> • DirectoryStream 也繼承了 Iterable 介 面,所以可使用增強式 for 迴圈語法來逐一 取得 Path
53.
讀取、走訪目錄
54.
讀取、走訪目錄 • 如果想要走訪目錄中所有 案與子目錄,可檔 以實作
FileVisitor 介面
55.
讀取、走訪目錄
56.
讀取、走訪目錄 • 可以繼承 SimpleFileVisitor
類別,這 個類別實作了 FileVisitor 介面,你只要 繼承之後重新定義感興趣的方法就可以了
57.
58.
讀取、走訪目錄 • 如果要使用 FileVisitor
走訪目錄,可以 使用 Files.walkFileTree() 方法:
59.
讀取、走訪目錄 • Files 新增了
list() 與 walk() 靜態方法 ,它傳回的是 Stream<Path> • lines() 、 list() 與 walk() 傳回的 Stream 不使用時需要呼叫 close() 方法來 釋放資源
60.
過濾、搜尋 案檔 • 想顯示
.class 與 .jar 案:檔 • 像 *.{class,jar} 這樣的語法稱之為 Glob
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 結尾。
63.
過濾、搜尋 案檔
64.
過濾、搜尋 案檔 • 如果
Glob 語法無法滿足條件過濾需求時,可 以自行實作 DirectoryStream.Filter 的 accept() 方法自訂過濾條件
65.
過濾、搜尋 案檔 • 可以使用
FileSystem 實例的 getPathMatcher() 取得 PathMatcher 介面實作物件 – 可以指定使用 種模式比對語法,哪 "regex" 表 示使用規則表示式語法、 "glob" 表示 Glob 語 法
Download now