如何在不知道文件扩展名的情况下实例化 java.io.File 对象?
How to instantiate java.io.File object without knowing file extension?
我将图像的文件名存储在我的数据库中(user_id.extension,例如14.png)。
假设,我需要检索一个文件并将其写入流。但是如何在不知道文件扩展名(图像可以是 jpg、png 等)的情况下创建 java.io.File
对象?现在在我的数据库中只有扩展名为 .png 的图像,我这样做:
File file = new File(pathToAvatarFolder + File.separator + user.getId() + ".png");
有没有优雅的解决方案?我只想到蛮力解决方案:
List<String> imageExtensions = new ArrayList<>();
imageExtensions.add(".png");
imageExtensions.add(".jpg");
imageExtensions.add(".jpeg");
File file;
for(int i = 0; i < imageExtensions.size(); i++) {
file = new File(pathToAvatarFolder + File.separator + user.getId() + imageExtensions.get(i));
if (file.exists()) {
break;
}
file = null;
}
为了清楚起见,我需要使用不带扩展名的路径名来实例化 java.io.File
对象。
import java.nio.*;
import java.nio.file.*;
Files.probeContentType((new File("filename.ext")).toPath());
这returns文件的类型。对于 png,它将是 image/png。
我将图像的文件名存储在我的数据库中(user_id.extension,例如14.png)。
假设,我需要检索一个文件并将其写入流。但是如何在不知道文件扩展名(图像可以是 jpg、png 等)的情况下创建 java.io.File
对象?现在在我的数据库中只有扩展名为 .png 的图像,我这样做:
File file = new File(pathToAvatarFolder + File.separator + user.getId() + ".png");
有没有优雅的解决方案?我只想到蛮力解决方案:
List<String> imageExtensions = new ArrayList<>();
imageExtensions.add(".png");
imageExtensions.add(".jpg");
imageExtensions.add(".jpeg");
File file;
for(int i = 0; i < imageExtensions.size(); i++) {
file = new File(pathToAvatarFolder + File.separator + user.getId() + imageExtensions.get(i));
if (file.exists()) {
break;
}
file = null;
}
为了清楚起见,我需要使用不带扩展名的路径名来实例化 java.io.File
对象。
import java.nio.*;
import java.nio.file.*;
Files.probeContentType((new File("filename.ext")).toPath());
这returns文件的类型。对于 png,它将是 image/png。