JavaFX 2.2 Get selected file extension

11.2k views Asked by At

I don't know how to get selected file extension. I have seen that developers ask this question frequently, but I could find and proper answer. I know it is a bug (http://javafx-jira.kenai.com/browse/RT-18836), but anyways, is there any solutions for it. I wanto to save my linechart as .PDF or .PNG file. My code for both files works fine. But I just can't stand not to get selected file. Is there any solution possible? I see that Java has built in function for this issue.

This solution is not relevant for me: JavaFX FileChooser not returning file extension for Windows

My code is:

 FileChooser fileChooser = new FileChooser();
 FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("PDF file(*.pdf)" ,"      
 *.pdf");

 fileChooser.getExtensionFilters().add(extFilter);
 extFilter = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.png");
 fileChooser.getExtensionFilters().add(extFilter);
 fileChooser.setTitle("Save as");
 File file = fileChooser.showSaveDialog(primaryStage);

Then I get file path without extensions:

 String filePath = file.getAbsolutePath();
2

There are 2 answers

0
Shreyas Dave On BEST ANSWER

If you want to know the extension of selected file from file chooser here is a code..

String fileName = file1.getName();          
String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1, file1.getName().length());
System.out.println(">> fileExtension" + fileExtension);

And here is a brief of what you need to do with file chooser,

FileChooser fileChooser = new FileChooser();
// Set extension filter
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Image Files", "*.jpg", "*.jpeg");
fileChooser.getExtensionFilters().add(extFilter);

File file = fileChooser.showOpenDialog(root.getScene().getWindow());

if (file != null) {

String fileName = file.getName();           
String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1, file.getName().length());
System.out.println(">> fileExtension" + fileExtension);

}
0
user2163960 On

This is a pretty annoying thing in JavaFX if you ask me - because they will automatically append the extension on Windows, but not on Linux or Mac.

So, if you want to be sure that the file you will create will have an extension, you need to do something like this:

FileChooser fc = new FileChooser();
fc.setInitialFileName("Exported.txt");
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("Text Files (*.txt)", "*.txt"));
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("XML Files (*.xml)", "*.xml"));
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("All Files (*.*)", "*"));
File file = fc.showSaveDialog(rootPane.getScene().getWindow());
if (file != null)
{
    File f;
    String tempPath = file.getCanonicalPath().toLowerCase();
    if (!(tempPath.endsWith(".txt") || tempPath.endsWith(".xml")))
    {
        String extension = fc.selectedExtensionFilterProperty().get().getExtensions().get(0).substring(1);
        // default to .txt, if the user had *.* selected
        if (extension.length() == 0)
        {
            extension = ".txt";
        }
        f = new File(file.getCanonicalPath() + extension);
    }
    else
    {
        f = file.getCanonicalFile();
    }

    System.out.println(f);
    if (f.exists())
    {
        System.err.println("You will overwrite!");
    }
}

Note, since we are potentially using a different file name than what came out of the file chooser, the user may not have been prompted about overwriting an existing file - so you will have to handle that check manually as well.