当前位置:  开发笔记 > 编程语言 > 正文

Java文件存在区分大小写的.jpg和.JPG

如何解决《Java文件存在区分大小写的.jpg和.JPG》经验,为你挑选了2个好方法。



1> ArcticLord..:

因此,您希望获得存储在文件系统中的文件的真实区分大小写的名称.让我们有成像,我们有以下路径:

Linux上:使用ext4(区分大小写)/testFolder/test.PnG

Windows上使用NTFS(区分大小写)c:\testFolder\test.PnG

现在让我们File为每个图像文件创建一些Java 对象.

// on Linux
File f1 = new File("/testFolder/test.png");
File f2 = new File("/testFolder/test.PNG");
File f3 = new File("/testFolder/test.PnG");
f1.exists(); // false
f2.exists(); // false
f3.exists(); // true

// on Windows
File f1 = new File("c:\\testFolder\\test.png");
File f2 = new File("c:\\testFolder\\test.PNG");
File f3 = new File("c:\\testFolder\\test.PnG");
f1.exists(); // true
f2.exists(); // true
f3.exists(); // true

您的问题是,所有File类似的调用File.exists都被重定向到java.io.FileSystem代表文件系统的实际操作系统调用的类JVM.所以你无法区分Windows机器test.PNGtest.png.Windows本身也不是.

即使在Windows上,每个文件在文件系统中都有一个已定义的名称,例如:test.PnG.Windows Explorer如果键入,您将在您的或命令行中看到此信息dir c:\testFolder.

因此,您可以在Java 中执行的操作是使用该File.list方法parent directory导致操作系统列表调用此目录中的所有文件及其真实名称.

File dir = new File("c://testFolder//");
for(String fileName : dir.list())
    System.out.println(fileName);
// OUTPUT: test.PnG

或者如果你喜欢File对象

File dir = new File("c://testFolder//");
for(File file : dir.listFiles())
    System.out.println(file.getName());
// OUTPUT: test.PnG

您可以使用它来编写自己的exists在所有操作系统上区分大小写的方法

public boolean exists(File dir, String filename){
    String[] files = dir.list();
    for(String file : files)
        if(file.equals(filename))
            return true;
    return false;
}

像这样使用它:

File dir = new File("c:\\testFolder\\");
exists(dir, "test.png");   // false
exists(dir, "test.PNG");   // false
exists(dir, "test.PnG");   // true



编辑:我不得不承认我错了.有一种方法可以获得文件的真实名称.我总是忽略这个方法File.getCanonicalPath.
再一次我们的例子:我们有那个文件c:\testFolder\test.PnG.

File f = new File("c://testFolder//test.png");
System.out.println(f.getCanonicalPath());
// OUTPUT: C:\testFolder\test.PnG

有了这些知识,您就可以为区分大小写的扩展编写一个简单的测试方法,而无需迭代所有文件.

public boolean checkExtensionCaseSensitive(File _file, String _extension) throws IOException{
    String canonicalPath = _file.getCanonicalPath();
    String extension = "";
    int i = canonicalPath.lastIndexOf('.');
    if (i > 0) {
        extension = canonicalPath.substring(i+1);
        if(extension.equals(_extension))
            return true;
    }
    return false;
}

像这样使用它:

File f = new File("c://testFolder//test.png");    
checkExtensionCaseSensitive(f, "png"); // false
checkExtensionCaseSensitive(f, "PNG"); // false
checkExtensionCaseSensitive(f, "PnG"); // true



2> NiMa Thr..:

如果您正在寻找一个可以在任何平台上确定文件存在且区分大小写的函数;这应该做到这一点:

public static boolean fileExistsCaseSensitive(String path) {
    try {
        File file = new File(path);
        return file.exists() && file.getCanonicalFile().getName().equals(file.getName());
    } catch (IOException e) {
        return false;
    }
}

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有