一款处理文件的API

下文主要是一些处理文件相关的api,

标题

Path

JDK7引入的Path和Paths类,Path用来表示文件路径,Paths是一个工具类 用来获取Path实例对象

Path source = Paths.get("D:\\aaa\\bb...");
Path source = Paths.get("D:/aaa/bb...");
Path source = Paths.get("D:\\aaa","bb"); // 这里这表示D://aaa//bb

// 输出正常的文件路径
System.out.printlb(path.normalize());

Path 也支持 . 和 … 表示当前路径与上一级路径

Files

检查文件或文件夹是否存在:Files.exists(Path path)


创建一级目录:Files.createDirectory(Paths.get("E:\\1bbb\\测试创建文件夹")),如果目录已经存在或者是创建多级目录是会有异常的。


创建多级目录:Files.creatDirectories(Path path)


拷贝文件:Files.copy(Path source , Path target);第一个参数就是原文件,第二个参数就是拷贝到哪去,如果文件已经存在也会抛异常。

Path source = Paths.get("E:\\1bbb\\照片\\2852CF8E7B2523436666674951FA17BE.jpg");
Path target = Paths.get("E:\\1bbb\\测试创建文件夹\\testCopy.jpg");
Files.copy(source,target);

如果希望即使target文件已经存在,但还是想要source替换掉target可以在copy()方法中加一个参数

Files.copy(source,target, StandardCopyOption.REPLACE_EXISTING);



移动文件 StandardCopyOption.ATOMIC_MOVE 参数保证文件移动时的原子性

Path source = Paths.get("E:\\1bbb\\照片\\2852CF8E7B2523436666674951FA17BE.jpg");
Path target = Paths.get("E:\\1bbb\\照片\\2852CF8E7B2523436666674951FA17BE.jpg");
Files.move(source,target, StandardCopyOption.ATOMIC_MOVE);



删除文件:Files.delete(Path path) 如果文件不存在会抛异常

删除目录: 也是调用delete()方法,但是如果文件夹中有内容的话会报异常,只能删除空文件夹



遍历目录:

package com.hs.netty.file;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * 测试Fils工具类操作文件
 * @author hs
 * @date 2021/07/11
 */
public class FilesTest {
    public static void main(String[] args) throws IOException {
        Path source = Paths.get("C:\\Program Files\\Java\\jdk1.8.0_231");
        // walkFileTree(参数1是要遍历的目录Path对象,参数2是遍历后要执行的操作)
        Path path = Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
            /**
            * 注意下面重写的方法 返回值不要变 就这样写
             * 进入到该目录之前执行的方法
             */
            @Override
          public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
              System.out.println("---> 进入目录:" + dir);
              return super.preVisitDirectory(dir, attrs);
          }

            /**
             * 遍历文件夹中的每个文件时执行的方法
             */
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                System.out.println("文件:" + file);
                return super.visitFile(file, attrs);
            }

            /**
             * 遍历文件执行失败执行的方法
             */
            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return super.visitFileFailed(file, exc);
            }

            /**
             * 文件遍历完后 执行的方法
             */
            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                System.out.println("<-----退出目录:" + dir );
                return super.postVisitDirectory(dir, exc);
            }
        });
    }
}

如果要删除一个多级目录,那就可以先在重写的visitFile()方法中删除每个文件,然后在重写的postVisitDirectory()方法中删除文件夹。

如果要拷贝一个文件夹,那就可以先在preVisitDirectory()方法中在要生成的位置创建一个文件夹,然后在重写的visitFile()方法中copy每个文件。但是这里有一个路径字符串替换的问题,需要在创建文件夹和复制文件时要把原路径字符串替换成新的要生成的路径,

就比如原始路径是E:\1bbb\照片,拷贝后的路径是D:\aa\bb

创建是文件夹就要从E:\1bbb\照片\image 改为 D:\aa\bb\image 。 就是需要把原始路径的前面一部分替换成新路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值