无论Casing如何找到文件?

时间:2014-04-16 11:30:40

标签: java file io

我正在制作一个节目。然而,该程序是我在基于Linux的操作系统上,它想要所有文件的完美案例匹配名称,并考虑到艺术家有一些名为Caps,有些没有,有些有" .PNG"有些是" .Png"还有一些是" .PNG"等;这正成为一项非常艰巨的任务。有超过一千个Sprites,或者重命名它们不会有问题。这是我正在为学习而做的2D RPG爱好项目,目的是我现在已经工作了一段时间。

无论如何,我的问题是我们是否可以制作编译器(我认为这是正确的方法)忽略文件结束字符套管?如果我想加载以下项目

  • 1.JPG
  • 2.JPG
  • 3.JPG
  • 4.JPG
  • 5.JPG

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

2 个答案:

答案 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);
}