Java处理IO的现代方式
2019-01-24 本文已影响2人
王小杰at2019
介绍
Java 7 引入了全新的 I/O API(一般称为 NIO.2),几乎可以完全取代以前使用 File 类处理
I/O 的方式。新添加的各个类都在 java.nio.file 包中。
很多情况下,使用 Java 7 引入的新 API 处理 I/O 更简单。新 API 分为两大部分:第一部分
是一个新抽象,Path 接口(这个接口的作用可以理解为表示文件的位置,这个位置可以有
内容,也可以没有);第二部分是很多处理文件和文件系统的新方法,方便且实用。
新方法都是 Files 类的静态方法。
部分功能实例
//文件拷贝
Files.copy(Paths.get("C:\\Users\\WangYa\\Desktop\\面试\\13284254-6f518e7f218adb11.png"), Paths.get("d:\\test.png"), StandardCopyOption.REPLACE_EXISTING);
//文件属性
Map<String, Object> attributes = Files.readAttributes(Paths.get("C:\\Users\\WangYa\\Desktop\\面试\\13284254-6f518e7f218adb11.png"), "*");
log.info("attributes:{}", JSON.toJSON(attributes));
//列出路径
Files.list(Paths.get("d:\\")).forEach(path -> {
log.info("path:{}", path);
});
//递归列出木目录
Files.walk(Paths.get("D:\\KuGou"), FileVisitOption.FOLLOW_LINKS).forEach(
path -> {
log.info(path.toString());
}
);
//递归限定深度
Files.walk(Paths.get("D:\\Program Files"), 1, FileVisitOption.FOLLOW_LINKS).forEach(
path -> {
log.info(path.toString());
}
);
// 存储器空间
FileStore fileStore = Files.getFileStore(Paths.get("D:"));
log.info("fileStore :{}", JSON.toJSON(fileStore));
//读取一个文本文件
byte[] bytes = Files.readAllBytes(Paths.get("C:\\Users\\WangYa\\Desktop\\build\\api.sh"));
log.info("content:{}", new String(bytes, "utf-8"));
UserPrincipal owner = Files.getOwner(Paths.get("C:\\Users\\WangYa\\Desktop\\build\\api.sh"));
log.info("owner:{}", owner.getName());
一个简单的文件下载操作,非常简单,不用任何第三方包
URL url = new URL("http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.14/bin/apache-tomcat-9.0.14.tar.gz");
Files.copy( url.openConnection().getInputStream(),Paths.get("D://apache-tomcat-9.0.14.tar.gz"));