使用JFileChooser将文件类型附加到Java文件中

问题描述:

我试图使用JFileChooser保存图像。我只希望用户能够将图像保存为jpg。但是,如果他们不输入.jpg,它不会被保存为图像。是否有可能以某种方式将“.jpg”附加到文件末尾?使用JFileChooser将文件类型附加到Java文件中

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

+0

这个答案就可以做到。但是,请执行filePath.concat(“。jpg”)以避免不必要的StringBuilder构造。 – Justin

+0

@Justin创建一个新的'StringBuilder'的开销应该可以忽略不计,因为他只执行一次动作。 – Jeffrey

+0

谢谢杰弗里:)可悲的是我还不能投票。你知道为什么\t \t \t \t \t格式名称在这里是必需的:ImageIO.write(image,“jpg”,file);它似乎没有什么区别?如果你必须在文件上使用格式? – Kingteeb

最好的办法是检查一个可接受的条目。如果没有找到,则替换文件exention而不是写在最上面。

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); 
} 
+1

一个很好的解决方案,用一个'if'覆盖所有的扩展,但需要添加'(?i)'使其不区分大小写(捕获JPG和jpg):if(!path.matches(“( ?我)* \\(JPG |。JPEG)“))'。还需要说明所选(或类型)文件名没有扩展名的情况,其中'path.lastIndexOf(“。”)'返回-1(例如,输入'test',代码将会改变它到'jpg',而不是'test.jpg' – chr

+0

同意你可以做的另一件事是如果你想要速度,一起跳过正则表达式 – Justin

+0

代码即将读取或写入磁盘,正则表达式会比较我喜欢你用正则表达式来捕捉所有可能的扩展的方式。 – chr

它的工作原理,如果你在两个步骤完成:添加扩展到选定的文件,然后创建一个附加到它的扩展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");