我想使用JFileChooser保存一张图片。我只希望用户将该图片保存为jpg格式。但是,如果他们没有输入 ".jpg" 后缀,则无法以图像的形式保存。是否可能在文件末尾添加 ".jpg" 后缀?
File file = chooser.getSelectedFile() + ".jpg";
我在向文件添加字符串时出现了问题。
我想使用JFileChooser保存一张图片。我只希望用户将该图片保存为jpg格式。但是,如果他们没有输入 ".jpg" 后缀,则无法以图像的形式保存。是否可能在文件末尾添加 ".jpg" 后缀?
File file = chooser.getSelectedFile() + ".jpg";
我在向文件添加字符串时出现了问题。
为什么不将 File
转换为 String
,并在完成后创建一个新的 File
?
File f = chooser.getSelectedFile();
String filePath = f.getAbsolutePath();
if(!filePath.endsWith(".jpg")) {
f = new File(filePath + ".jpg");
}
记住,如果已经存在,您不需要添加 .jpg
。
如果您按照以下两个步骤操作,它就可以正常工作:给所选文件添加扩展名,然后创建一个附加有该扩展名的File
对象。
String withExtension = chooser.getSelectedFile().getAbsolutePath() + ".jpg";
File file = new File( withExtension )
根据您的问题,但为了覆盖所有情况:首先需要检查扩展名是否已存在,例如:
String withExtension = chooser.getSelectedFile().getAbsolutePath();
if( !withExtension.toLowerCase().endsWith( ".jpg" ) )
withExtension += ".jpg";
[你可能需要在上面的 if
语句中添加 ".jpeg" - 它是 JPEG 文件的有效扩展名]
下面的代码可能会工作,也可能不会。 File
有一个 toString()
方法使其可以编译,但我更愿意使用上面的方法,因为我可以控制我获取的确切路径名。对于 File
对象的 toString()
文档对我来说有点不清楚它到底返回什么。在像这样的情况下,我更喜欢调用一个我知道肯定返回我需要的东西的函数。
File file = new File( chooser.getSelectedFile() + ".jpg" );
File f = chooser.getSelectedFile().getAbsolutePath();
String path = f.getAbsolutePath();
if (!path.matches(".*\\.(jpg|jpeg)")) {
// If the extension isn't there. We need to replace it
path = path.substring(0, path.lastIndexOf(".") + 1).concat("jpg");
f = new File(path);
}
if
语句来覆盖所有扩展名,但需要添加(?i)
以使其不区分大小写(捕获JPG和jpg):if (!path.matches("(?i).*\\.(jpg|jpeg)"))
。还需要考虑所选(或键入)文件名没有扩展名的情况,其中path.lastIndexOf(".")
返回-1(例如,对于输入test
,代码将把它更改为jpg
,而不是test.jpg
)。 - Christian Garbin
StringBuilder
的开销应该可以忽略不计。 - JeffreytoLowerCase()
转换为小写字母。否则,在Windows系统下,用户可能会输入“myfile.JPG”,导致代码出现错误。 - Christian Garbin