我正在制作一个节目。然而,该程序是我在基于Linux的操作系统上,它想要所有文件的完美案例匹配名称,并考虑到艺术家有一些名为Caps,有些没有,有些有" .PNG"有些是" .Png"还有一些是" .PNG"等;这正成为一项非常艰巨的任务。有超过一千个Sprites,或者重命名它们不会有问题。这是我正在为学习而做的2D RPG爱好项目,目的是我现在已经工作了一段时间。
无论如何,我的问题是我们是否可以制作编译器(我认为这是正确的方法)忽略文件结束字符套管?如果我想加载以下项目
我希望能够在一行中完成。
答案 0 :(得分:1)
你无法使编译器忽略大小写;这是一个文件系统特性。请注意,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()
和lambdas。
答案 1 :(得分:0)
如果您知道该文件的确切目录,则可以使用File.list()
获取此目录中所有文件的String[]
。通过迭代这些并在文件名上使用toLowerCase()
,您可以找到所需的文件。
String filename = "1.jpg";
String targetFilename = null;
File directory = new File("/some/path");
for(String maybeTargetName : directory.list()) {
if(filename.equals(maybeTargetName.toLowerCase()) {
targetFilename = maybeTargetName;
break;
}
}
if(targetFilename != null) {
File targetFile = new File(directory, targetFilename);
}