美文网首页
【转】Java 文件处理 Paths & Files

【转】Java 文件处理 Paths & Files

作者: 小孩真笨 | 来源:发表于2019-12-23 15:22 被阅读0次

文件路径的描述与操作 Path & Paths

1、文件路径字符串转 Patsh 对象

Path filePath = Paths.get("/Users/Anoyi/aaa.txt");

另一种写法:

Path filePath = Paths.get("/Users", "Anoyi", "aaa.txt");

2、 Path 对象常用操作

 # 获取文件名 aaa.txt
 filePath.getFileName()
 
 # 获取父路径 /Users/Anoyi
 filePath.getParent()
 
 # 获取文件层级数量 3
 filePath.getNameCount()
 
# 获取指定层级文件(夹)名 Anoyi
filePath.getName(1)

# 获取同级目录其他文件(夹) /Users/Anoyi/bbb.txt
filePath.resolveSibling("bbb.txt")

# 获取同级目录其他文件(夹) /Users/Anoyi/zzz/bbb.txt
filePath.resolveSibling("zzz/bbb.txt")

# 获取子级目录其他文件(夹) /Users/Anoyi/aaa.txt/bbb.txt
filePath.resolve("bbb.txt")

# 获取绝对路径 /Users/Anoyi/aaa.txt ,如果是 Paths.get("Users/Anoyi/aaa.txt"),则绝对路径为:项目绝对路径 + "/Users/Anoyi/aaa.txt"
filePath.toAbsolutePath()

# 转化为文件
filePath.toFile()

文件操作 Path & Files

1、基本操作

 Path dirPath = Paths.get("/Users/Anoyi");
 
 # 校验文件(夹)存在
 Files.exists(dirPath)
 
 # 校验文件(夹)不存在
 Files.notExists(dirPath)
 
 # 校验是否为文件夹
Files.isDirectory(dirPath)

# 校验是否为文件 /Users/Anoyi/aaa.txt
Files.isRegularFile(dirPath.resolve("aaa.txt"))

# 创建文件 /Users/Anoyi/bbb.txt
Files.createFile(dirPath.resolve("bbb.txt"))

# 创建文件夹 /Users/Anoyi/xxx
Files.createDirectory(dirPath.resolve("xxx"))

# 创建多级文件夹 /Users/Anoyi/yyy/zzz
Files.createDirectory(dirPath.resolve("yyy/zzz"))

# 文件(夹) 删除
Files.delete(dirPath)
Files.deleteIfExists(dirPath)

# 文件(夹)复制 /Users/Anoyi/aaa.txt == /Users/Anoyi/ccc.txt
Files.copy(dirPath.resolve("aaa.txt"), dirPath.resolve("ccc.txt"))

# 文件(夹)移动 /Users/Anoyi/aaa.txt => /Users/other/aaa.txt
Files.move(dirPath.resolve("aaa.txt"), Paths.get("/Users/other/aaa.txt"), StandardCopyOption.REPLACE_EXISTING)

2、文件读写

 Path filePath = Paths.get("/Users/Anoyi/aaa.txt");
 
 # 读所有行文本,默认使用 UTF-8
 Files.readAllLines(filePath, Charset.defaultCharset())
 
 # 读字节数组
 Files.readAllBytes(filePath)
 
 # 写文本
Files.write(filePath, Arrays.asList("line1", "line2"))

# 写字节数组
Files.write(filePath, new byte[]{})

# 更灵活的写入数据
Files.newBufferedWriter(filePath).write(...)

# 获取 InputStream
Files.newInputStream(filePath)

# 获取 OutputStream
Files.newOutputStream(filePath)

3、文件列表与查找

Path dirPath = Paths.get("/Users/Anoyi");

# 文件列表
Files.list(dirPath)

# 文件查找,查找路径深度 5
Files.find(dirPath, 5, <条件>)

常用场景

1、文件列表,中文排序

 1    /**
 2     * 文件(夹)列表
 3     *
 4     * @param path 路径
 5     */
 6    public List<File> listDirs(String path) throws IOException {
 7        Path dirPath = Paths.get(path);
 8        if (Files.isDirectory(dirPath)) {
 9            Comparator<BaseFileBean> comparing = (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName());
10            return Files.list(Paths.get(path)).map(Path::toFile).sorted(comparing).collect(Collectors.toList());
11        }
12        return new ArrayList<>();
13    }

2、文件查找,忽略英文大小写

 1    /**
 2     * 查找文件(夹)
 3     */
 4    public List<BaseFileBean> findFiles(String folder, String keyword) throws IOException {
 5        final int MAX_DEPTH = 5;
 6        File dir = new File(folder);
 7        if (dir.exists() && dir.isDirectory()) {
 8            final String lowerKeyword = keyword.toLowerCase();
 9            Comparator<BaseFileBean> comparing = (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName());
10            Stream<Path> stream = Files.find(Paths.get(folder), MAX_DEPTH, (path, basicFileAttributes) -> path.getFileName().toString().toLowerCase().contains(lowerKeyword));
11            return stream.map(Path::toFile).sorted(comparing).collect(Collectors.toList());
12        }
13        return new ArrayList<>();
14    }

相关文章

    本文标题:【转】Java 文件处理 Paths & Files

    本文链接:https://www.haomeiwen.com/subject/wlgznctx.html