这里介绍 java.nio.file 包下对文件的操作

Path

java.nio.file.Path 是一个接口,代表文件系统中的一个目录或文件路径,和 java.io.File 类相似。

Path 可以通过 Paths 的静态方法构造,使用用法:

  1. Path path = Paths.get("E:\\path\\a.txt");

该方法并不会真的创建目录或文件。

Path 中定义了很多对文件系统的操作,常见的有:

  1. boolean isAbsolute():判断是否是绝对路径;
  2. boolean startsWith(Path other):判断是否以某路径开头
  3. boolean endsWith(Path other):判断是否以某路径结束;
  4. Path getRoot():获取路径的根组件;
  5. Path getFileName():获取路径的目录名或文件名;
  6. Path getParent():获取路径的父级路径;
  7. int getNameCount():获取路径中元素个数,如果是根目录返回 0;
  8. Path getName(int index):获取路径中指定索引的元素作为路径返回;
  9. Path resolve(Path other):拼接目录与目录或文件;
  10. Path toAbsolutePath():获取绝对路径;
  11. File toFile():转 File 类;

    Paths

    java.nio.file.Paths 是一个不可变类,提供了根据文件路径或 URI 来构造 Path 对象的静态方法;

  12. public static Path get(String first, String... more):根据参数拼接文件的路径构造一个 Path 类型对象;

  13. public static Path get(URI uri):根据 URI 构造 Path 类型对象;

    Files

    java.nio.file.Files 是一个不可变类,提供了对文件、目录操作的静态工具方法;

下面通过示例演示 Files 类中的静态方法

创建目录

public static Path createDirectory(Path dir, FileAttribute<?>... attrs)

  1. 创建一个新目录,前提是父级目录都必须存在;

public static Path createDirectories(Path dir, FileAttribute<?>... attrs)

  1. 创建多级目录,如果已经存在则返回;
  2. 路径中必须是目录,如果是其他元素则抛出异常;

创建文件

public static Path createFile(Path path, FileAttribute<?>... attrs)

  1. Path path = Paths.get("E:\\nio\\file\\Files\\a.txt");
  2. Files.createDirectories(path.getParent());
  3. Files.createFile(path);
  1. 参数 path 中目录必须存在,也就是必须先创建目录才能创建文件;
  2. 文件如果已存在,则抛出异常;

写入文件

public static Path write(Path path, byte[] bytes, OpenOption... options)

  1. Path path = Paths.get("E:\\nio\\file\\Files\\a.txt");
  2. MultipartFile file = request.getFile();
  3. Files.write(path, file.getBytes(), StandardOpenOption.WRITE);

创建临时文件/目录

public static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs)

public static Path createTempFile(String prefix, String suffix, FileAttribute<?>… attrs)

Path file = Files.createTempFile("prefix", ".suffix"); // prefixxxxxxx.suffix

public static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs)

public static Path createTempDirectory(String prefix, FileAttribute<?>... attrs)

Path dir = Files.createTempDirectory("prefix"); //    /prefixxxxxxx

获取输入输出流

public static InputStream newInputStream(Path path, OpenOption... options)
public static OutputStream newOutputStream(Path path, OpenOption... options)

删除路径

public static void delete(Path path)
public static boolean deleteIfExists(Path path)

复制、移动(重命名)

public static Path copy(Path source, Path target, CopyOption... options)
public static Path move(Path source, Path target, CopyOption... options)

复制文件输入输出流:
public static long copy(InputStream in, Path target, CopyOption… options)
public static long copy(Path source, OutputStream out)

判断文件类

  1. 判断是否是目录:public static boolean isDirectory(Path path, LinkOption… options)
  2. 判断是否相同路径:public static boolean isSameFile(Path path, Path path2)
  3. 判断是否隐藏文件:public static boolean isHidden(Path path)
  4. 判断文件是否存在:public static boolean exists(Path path, LinkOption… options)
  5. 判断文件是否不存在:public static boolean notExists(Path path, LinkOption… options)
  6. 判断文件是否可读:public static boolean isReadable(Path path)
  7. 判断文件是否可写:public static boolean isWritable(Path path)
  8. 判断文件是否可执行:public static boolean isExecutable(Path path)

    获取文件属性类

  9. 获取文件大小:public static long size(Path path)

  10. 获取文件属性:public static Object getAttribute(Path path, String attribute, LinkOption… options)
  11. 获取Owner:public static UserPrincipal getOwner(Path path, LinkOption… options)
  12. 获取最后修改时间:public static FileTime getLastModifiedTime(Path path, LinkOption… options)

    遍历文件树

    public static Path walkFileTree(Path start, FileVisitor<? super Path> visitor)