区分大小写的文件扩展名和存在检查
我需要检查文件是否存在。可以通过File#exists()
方法来完成。但是这种存在检查是区分大小写的。我的意思是,如果我在代码中有一个文件名some_image_file.jpg,但实际上如果文件是some_image_file.JPG,则此方法表示该文件不存在。如何以不区分大小写的扩展名检查文件的存在并获取实际的文件名?
在我的情况下,我有一个Excel文件。每行包含文件和文件名的元数据。在某些情况下,我只有文件名,而在其他情况下,我可以拥有完整路径。我将一行表示为文档。
这些文件放置在服务器中。我的工作是
- 逐行阅读excel文件并列出所有文档。
- 取出文件名或文件路径。
- 创建文件的完整路径。
- 检查文件是否存在。
- 验证文档中提供的其他元数据/信息。
- 上载文件。
如果文件不存在或某些元数据无效,我的应用程序将引发异常。
excel文件是由客户编写的,他们写了一些错误的文件名,我的意思是,如果文件实际具有小写扩展名,则他们以大写形式写扩展名,反之亦然。
我在UNIX服务器上运行该应用程序。
由于文件扩展名不匹配,因此File#exists()
给出了false,最终我的代码引发了异常。
放置文件的文件夹可以包含30000个或更多文件。
我想要的是
- 采取文件的完整路径。
- 检查文件是否存在。
- 如果不存在,则
- 通过转换扩展名的大小写检查文件是否存在。
- 如果大小写转换后不存在,则抛出异常。
- 如果存在,则返回实际的文件名或文件路径。
如果文件名具有 类的文件扩展名,则不知道该怎么办!我是否应该通过更改大小写来检查它?
回答:
这样,我解决了问题:
public String getActualFilePath() { File givenFile = new File(filePath);
File directory = givenFile.getParentFile();
if(directory == null || !directory.isDirectory()) {
return filePath;
}
File[] files = directory.listFiles();
Map<String, String> fileMap = new HashMap<String, String>();
for(File file : files) {
if(file.isDirectory()){
continue;
}
String absolutePath = file.getAbsolutePath();
fileMap.put(absolutePath, StringUtils.upperCase(absolutePath));
}
int noOfOcc = 0;
String actualFilePath = "";
for(Entry<String, String> entry : fileMap.entrySet()) {
if(filePath.toUpperCase().equals(entry.getValue())) {
actualFilePath = entry.getKey();
noOfOcc++;
}
}
if(noOfOcc == 1) {
return actualFilePath;
}
return filePath;
}
这filePath
是文件的完整路径。
以上是 区分大小写的文件扩展名和存在检查 的全部内容, 来源链接: utcz.com/qa/426092.html