java 板


LINE

blog 版:http://blog.dontcareabout.us/2014/04/nio2.html BBS 版以 markdown 語法撰寫 ______________________________________________________________________ ### 前言 ### 以往 Java 要操作檔案時,總得自己去面對 XXStream、XXReader、XXWriter, 一不小心就迷失在 class hierarchy 迷宮中 而搞不清楚到底該怎麼寫才好 [淚目]。 NIO.2 的出現,提供了簡單好用的 method 來解決這些困擾。 這篇都還在 Java 7 的範圍。 已經出的 Java 8 也對 NIO.2 做了一些改善, 中文資料可先參考 [Ingram Chen blog] 的 File operation 章節。 [Ingram Chen blog]: http://ingramchen.io/blog/2014/04/ java-8-new-api-tips.html ### Path ### 在 NIO.2 中描述檔案的方式,不再使用 `java.io.File`, 而改用 `java.nio.file.Path`。 跟 `File` 比起來,`Path` 的行為比較接近字串或 URI 的概念, 你沒辦法直接由 `Path` instance 去作一些操作(如 `File.mkdir()`) 或判斷(如 `File.exists()`),必須透過 `Files`。 另外 `File` 與 `Path` 不同之處在於 `Path` 可以提供 symbolic link 的功能。 在 `Path` 與 `File` 之間轉換, 可以透過 `Path.toFile()` 跟 `File.toPath()`。 注意:`File.getPath()` 跟 `Path` 沒有關係。 ### Files ### 單純以使用的角度來看,NIO.2 的精華 在於 `java.nio.file.Files` 這個 utility class, 把很多行為都包的很簡單扼要,簡潔度跟在 command line 下指令差不多, 幾乎直接條列出來就可以理解,不用多作解釋 (謎之聲:所以你是來混文章數的 [指]): * 複製檔案或目錄:`Files.copy(sourcePath, targetPath, copyOptions)` * copyOptions 參閱 `java.nio.file.StandardCopyOption` * 刪除檔案或目錄:`Files.delete(path)` * 移動檔案或目錄:`Files.move(sourcePath, targetPath, copyOptions)` * 取得檔案大小:`Files.size(path)`,單位是 byte * 讀取檔案:`Files.readAllBytes(path)` 會回傳 `byte[]`, 或是用 `Files.readAllLines(path, charset)` 會回傳 `List<String>`, charset 參閱 `java.nio.charset.Charset`。 * 寫入檔案:`Files.write(path, bytes, openOptions)` 或是 `Files.write(path, lines, charset, openOptions)`。 openOptions 參閱 `java.nio.file.StandardOpenOption`。 搭配 `File.toPath()`, 既有使用 `File` 的程式碼也幾乎能馬上轉換成使用 `Files`。 ### 其他有趣的功能 ### * 用 glob 字串(例如 `*.{java,class,jar}`) 來指定過濾目錄下檔案的方式。 過去得在 `File.list()` 時傳入 `FilenameFilter`, 現在則是用 `Files.newDirectorySteam(dirPath, globbingStr)`。 對於熟悉 glob 規則的人而言應該樂勝。 * 承上,用 glob 的方式找檔案。 * 監控目錄是否有改變。 * 判斷檔案的 MIME 型態。 完整的 NIO.2 教學可參見 [Java 官網][NIO.2]。 [NIO.2]: http://docs.oracle.com/javase/tutorial/essential/io/fileio.html ==== 在 #1JEuXhuu 下的推文看到 Killercat 提到 BufferedReader, 再加上今天看到 Ingram 的那篇 blog, 所以乾脆整理一篇文章來介紹(x)混文章數(o) 不過這玩意真的好用、又是 JDK 內建,不用可惜阿 XD -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.95.152
※ 文章網址: http://webptt.com/m.aspx?n=bbs/java/M.1396712127.A.A1C.html
1F:推 Killercat:這個算JDK8的亮點(雖然7就有) 不過8我最看好stream XD 04/05 23:47
2F:推 gmoz:感謝整理 04/06 19:51
3F:→ dream1124:推 04/09 00:41







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP