【发布时间】:2012-05-06 23:07:19
【问题描述】:
我正在尝试使用 JFileChooser 保存图像。我只希望用户能够将图像保存为 jpg。但是,如果他们不键入 .jpg,则不会将其保存为图像。是否可以以某种方式将“.jpg”附加到文件的末尾?
File file = chooser.getSelectedFile() + ".jpg";
在我向文件中添加字符串时不起作用。
【问题讨论】:
标签: java jfilechooser file-type
我正在尝试使用 JFileChooser 保存图像。我只希望用户能够将图像保存为 jpg。但是,如果他们不键入 .jpg,则不会将其保存为图像。是否可以以某种方式将“.jpg”附加到文件的末尾?
File file = chooser.getSelectedFile() + ".jpg";
在我向文件中添加字符串时不起作用。
【问题讨论】:
标签: java jfilechooser file-type
为什么不将File 转换为String 并在完成后创建一个新的File?
File f = chooser.getSelectedFile();
String filePath = f.getAbsolutePath();
if(!filePath.endsWith(".jpg")) {
f = new File(filePath + ".jpg");
}
请记住,如果 .jpg 已经存在,则无需添加它。
【讨论】:
StringBuilder 的开销应该可以忽略不计,因为他只执行了一次操作。
toLowerCase() 用户在测试扩展是否存在之前选择的文件名。否则,代码将在 Windows 中中断,用户可能(无论出于何种原因)键入“myfile.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";
[您可能希望将“.jpeg”添加到上面的if - 它是 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(".")returns -1(例如输入test,代码会将其更改为jpg,而不是test.jpg.