Java8 Paths类和Files类

Java8 中新增了Paths和Files两个工具类,用来便捷的操纵文件

Paths类

Path类表示的是一个目录名序列,其后还可以跟着一个文件名。Paths类示对应的工具类

//java.nio.file.Paths
static Path get(String first,String .. more)  

Paths类的get方法接受一个或多个字符串,并将它们用默认的文件系统的路径分隔符(类Unix文件系统是/,Windows是\)

比如

Path absolute =Paths.get("/home","harry");

表示路径为/home/harry

Files类

Files类使得普通文件操作变得快捷

@Test
    public void test2() throws IOException {
        //返回以相对地址为基础的路径,不判断文件是否存在
        Path path = Paths.get("pom.xml").toAbsolutePath();
        System.out.println(path);
        System.out.println("文件是否存在: " + Files.exists(path));
        System.out.println("是否是目录: " + Files.isDirectory(path));
        System.out.println("是否是可执行文件: " + Files.isExecutable(path));
        System.out.println("是否可读: " + Files.isReadable(path));
        System.out.println("判断是否是一个文件: " + Files.isRegularFile(path));
        System.out.println("是否可写: " + Files.isWritable(path));
        System.out.println("文件是否不存在: " + Files.notExists(path));
        System.out.println("文件是否隐藏: " + Files.isHidden(path));
        System.out.println("文件大小: " + Files.size(path));
        System.out.println("文件存储在SSD还是HDD: " + Files.getFileStore(path));
        System.out.println("文件修改时间:" + Files.getLastModifiedTime(path));
        System.out.println("文件拥有者: "  + Files.getOwner(path));
        System.out.println("文件类型: " + Files.probeContentType(path));
    }
@Test
    public void test2() throws IOException {
        //返回以相对地址为基础的路径,不判断文件是否存在
        Path path = Paths.get("pom.xml").toAbsolutePath();
        //读取文件所有字节
        byte[] bytes=Files.readAllBytes(path);
         String content=new String(bytes,charset);
        //按行读取
        List<String> lines=Files.readAlllines(path,charset);
        //写入字节
        Files.write(path,content.getBytes(charset));
        //向指定文件追加内容
        Files.write(path,content.getBytes(charset),StandardOpenOption.APPEND);
    }

注意的是,Files一般用于简单文件的读写,如果文件过大,还是应该使用IO流来进行读写。

@Test
    public void test2() throws IOException {
        //返回以相对地址为基础的路径,不判断文件是否存在
        Path path = Paths.get("pom.xml").toAbsolutePath();
        //创建文件
        Files.createFile(path);
        //复制文件,如果目标路径已经存在则会失败
        Files.copy(fromPath,toPath);
        //移动文件,如果目标路径已经存在则会失败
        Files.move(fromPath,toPath);
        //删除文件
        Files.delete(path);
    }

可以添加StandardOpenOption类作为一个参数 来完成指定功能

StandardOpenOption是一个枚举类,包括:
//用于write
READ
WRITE
APPEND:在文件末尾追加
TRUNCATE_EXISTING:移除已有内容
CREATE_NEW:创建新文件并且在文件已存在的情况下创建失败
CREATE:自动在文件不在的情况下创建新文件
DELETE_ON_CLOSE:当文件被关闭时,“尽可能”删除文件
SPARSE:给文件系统一个提示,表示该文件是稀疏的
DSYN|SYN:要求对文件数据 | 数据和元数据 的每次更新都必须同步写入到存储设备中

//用于copy,move
ATOMIC_MOVE:原子性的移动文件
COPY_ATTRIBUTES:复制文件的属性
REPLACE_EXISTING:如果目标已存在则替换它

posted @   刚刚好。  阅读(1873)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示