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/cn.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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP