gpt4 book ai didi

java - 不考虑大小写来定位文件?

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:01 34 4
gpt4 key购买 nike

我正在开发一个程序。然而,该程序是我在基于Linux的操作系统上,它希望所有文件都有完美的大小写匹配名称,并且考虑到艺术家有一些以大写字母命名,有些没有,有些有“.png”,有些是“.Png”,有些是“.PNG”,等等;这正在成为一项非常艰巨的任务。 Sprite 有一千多一点,或者重命名它们不会有问题。这是我为了学习而做的一个 2D RPG 爱好项目,我已经为此工作了一段时间了。

无论如何,我的问题是我们是否可以让“编译器”(我认为这是正确的表达方式)忽略文件结尾字符大小写?如果我想加载以下项目

  • 1.jpg
  • 2.Jpg
  • 3.JPg
  • 4.JPG
  • 5.jpG

我希望能够在一行中完成它。

最佳答案

你不能让编译器忽略大小写;这是文件系统的特性。请注意,NTFS 不区分大小写,但仍然保留大小写。

使用 Java 7,您可以使用 DirectoryStream.Filter<Path>收集相关路径;然后根据需要重命名:

final DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>()
{
@Override
public boolean accept(final Path entry)
{
return Files.isRegularFile(entry)
&& entry.getFileName().toString().toLowerCase().endsWith(".jpg");
}
};

final List<Path> collected = new ArrayList<Path>();

try (
final DirectoryStream<Path> entries = Files.newDirectoryStream(dir, filter);
) {
for (final Path entry: entries)
collected.add(entry);
}

Path dst;
String targetName;

for (final Path src: collected) {
targetName = src.getFileName().toString().toLowerCase();
dst = src.resolveSibling(targetName);
if (!Files.isSameFile(src, dst))
Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE);
}

对于 Java 8,您可能会使用 Files.walk()和 lambda 代替。

关于java - 不考虑大小写来定位文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108195/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com