在丑陋的 Java I/O 编程方式诞生多年以后,Java终于简化了文件读写的基本操作。

文件和目录路径

一个path对象表示一个文件或者目录的路径, 是一个跨操作系统(OS)和文件系统的抽象, 目的是在构造路径时不必关注底层操作系统, 可以在不进行修改的情况下 , 让程序运行在不同的操作系统上, java.nio.file.Paths 类包含一个重载方法static get(),也就是它帮你把你传入的String或者uri(统一资源标识符)来转换成对应的操作系统的路径, 返回一个path对象

路径分析

Files 工具类包含一系列完整的方法用于获得 Path 相关的信息。

  1. // files/PathAnalysis.java
  2. import java.nio.file.*;
  3. import java.io.IOException;
  4. public class PathAnalysis {
  5. static void say(String id, Object result) {
  6. System.out.print(id + ": ");
  7. System.out.println(result);
  8. }
  9. public static void main(String[] args) throws IOException {
  10. System.out.println(System.getProperty("os.name"));
  11. Path p = Paths.get("PathAnalysis.java").toAbsolutePath();
  12. say("Exists", Files.exists(p));
  13. say("Directory", Files.isDirectory(p));
  14. say("Executable", Files.isExecutable(p));
  15. say("Readable", Files.isReadable(p));
  16. say("RegularFile", Files.isRegularFile(p));
  17. say("Writable", Files.isWritable(p));
  18. say("notExists", Files.notExists(p));
  19. say("Hidden", Files.isHidden(p));
  20. say("size", Files.size(p));
  21. say("FileStore", Files.getFileStore(p));
  22. say("LastModified: ", Files.getLastModifiedTime(p));
  23. say("Owner", Files.getOwner(p));
  24. say("ContentType", Files.probeContentType(p));
  25. say("SymbolicLink", Files.isSymbolicLink(p));
  26. if(Files.isSymbolicLink(p))
  27. say("SymbolicLink", Files.readSymbolicLink(p));
  28. if(FileSystems.getDefault().supportedFileAttributeViews().contains("posix"))
  29. say("PosixFilePermissions",
  30. Files.getPosixFilePermissions(p));
  31. }
  32. }
  33. /* 输出:
  34. Windows 10
  35. Exists: true
  36. Directory: false
  37. Executable: true
  38. Readable: true
  39. RegularFile: true
  40. Writable: true
  41. notExists: false
  42. Hidden: false
  43. size: 1631
  44. FileStore: SSD (C:)
  45. LastModified: : 2017-05-09T12:07:00.428366Z
  46. Owner: MINDVIEWTOSHIBA\Bruce (User)
  47. ContentType: null
  48. SymbolicLink: false
  49. */

这一张看 java.nio.file 的javaDoc