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

2355681216-5e0e88f487afa_articlex

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

基本操作

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)

文件读写

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)

文件列表与查找

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

# 文件列表

Files.list(dirPath)

# 文件查找,查找路径深度 5

Files.find(dirPath, 5, )

常用场景

1、文件列表,中文排序

/**

* 文件(夹)列表

*

* @param path 路径

*/

public List listDirs(String path) throws IOException {

Path dirPath = Paths.get(path);

if (Files.isDirectory(dirPath)) {

Comparator comparing = (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName());

return Files.list(Paths.get(path)).map(Path::toFile).sorted(comparing).collect(Collectors.toList());

}

return new ArrayList<>();

}

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

/**

* 查找文件(夹)

*/

public List findFiles(String folder, String keyword) throws IOException {

final int MAX_DEPTH = 5;

File dir = new File(folder);

if (dir.exists() && dir.isDirectory()) {

final String lowerKeyword = keyword.toLowerCase();

Comparator comparing = (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName());

Stream stream = Files.find(Paths.get(folder), MAX_DEPTH, (path, basicFileAttributes) -> path.getFileName().toString().toLowerCase().contains(lowerKeyword));

return stream.map(Path::toFile).sorted(comparing).collect(Collectors.toList());

}

return new ArrayList<>();

}

本文由博客一文多发平台 OpenWrite 发布!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值