前言
前边为什么zip时,没使用org.apache.tools.zip
,一方面是由于代码本身的zip与unzip都是依赖的java.util.zip
,改起来比较麻烦一些,另一方面在org.apache.tools.zip
的示例代码中,用到了File,相比而言File会比Path落后一点。
这里对Path与File进行一个总结
Path是Java7出现的API,在java.nio包中;File与File*Stream在Java1.1中就已经存在了,在java.io包中,很显然Path是用来代替File的。
对比
项 | file | Path |
包 | java.io.file(class) | java.nio.file.path(interface) |
创建 | file = new File("path/to/file.txt") | path = Paths.get("path/to/file.txt") |
| file = new File(parentFile, "file.txt") | path = parentPath.resolve("file.txt") |
文件名 | file.getFileName() | path.getFileName().toString() |
绝对路径 | file.getAbsolutePath() | path.toAbsolutePath().toString() |
获取父级 | file.getParentFile() | path.getParent() |
创建文件夹 | file.mkdirs() | Files.createDirectories(path) |
文件大小 | file.length() | Files.size(path) |
判断是否存在 | file.exists() | Files.exists(path) |
是否是文件夹 | file.isDir() | Files.isDirectory(path) |
删除 | file.delete() | Files.delete(path) |
FileOutputStream | new FileOutputStream(file) | Files.newOutputStream(path) |
FileInputStream | new FileInputStream(file) | Files.newInputStream(path) |
遍历 | file.listFiles(filter) | Files.list(path) .filter(filter) .collect(toList()) |
- File更面向对象一些,接口大多是在File对象中调用;Path依赖Paths、Files等工具类来完成。
- File更倾向与返回值的true or false来判断执行结果;Path更倾向于抛异常IOException
示例
Files.write(Paths.get("image.png"), bytes); // 写文件
List<String> lines = Files.readAllLines(Paths.get("letter.txt"), StandardCharsets.UTF_8); // 读文件
Files.lines(Paths.get("letter.txt"), StandardCharsets.UTF_8)
.forEach(System.out::println);
参考
File VS Path