[Java] SaveFileDialog anzeigen

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * shows a SaveFileDialog
 */
public class SaveFileDialog
{
    private ArrayList<String> _extensiontext = new ArrayList<>();
    private ArrayList<String> _extension = new ArrayList<>();

    /**
     * shows SaveFileDialog
     * @param path initial path, may be null
     * @return selected file or null if not overwritten
     */
    public File showDialog(String path)
    {
        File f = null;
        
        if (_extensiontext.size() > 0)
        {
            if ((path == null) || (path.length() == 0))
            {
                path = System.getProperty("user.home");
            } 

            final JFileChooser c = new JFileChooser(path);

            c.setDialogTitle("Save file");
            c.setDialogType(JFileChooser.SAVE_DIALOG); 
            c.setFileSelectionMode(JFileChooser.FILES_ONLY);

            // add filters
            for (int i = 0; i < _extensiontext.size(); i++)
            {
                FileNameExtensionFilter ff = new FileNameExtensionFilter(_extensiontext.get(i), _extension.get(i));
                c.setFileFilter(ff);
            }

            c.setVisible(true);

            // if "ok" or "yes" pressed
            if (c.showSaveDialog(null) == JFileChooser.APPROVE_OPTION)
            {
                f = c.getSelectedFile();

                String nameLower = f.getName().toLowerCase();
                String[] exts = ((FileNameExtensionFilter)c.getFileFilter()).getExtensions();
                boolean hascorrectext = false;

                // check if filename ends with filterextension
                for (String ext : exts)
                {
                    if (nameLower.endsWith('.' + ext.toLowerCase()))
                    {
                        hascorrectext = true;
                        break;
                    }
                }

                if (!hascorrectext)
                {
                    // if not, make new filename
                    f = new File(f.toString() + '.' + exts[0].toLowerCase());
                }

                boolean overwrite = true;

                // if file exists ask for overwriting
                if (f.exists())
                {
                    overwrite = (JOptionPane.showConfirmDialog(null, "File exists, overwrite?", "Question", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION);
                }

                if (!overwrite)
                {
                    f = null;
                }
            }
            
            c.setVisible(false);
        }
        
        return f;
    }

    /**
     * adds FileNameExtensionFilter
     * @param text Filtertext, e.g. "Textfiles (*.txt)"
     * @param ext Filterextension, e.g. "txt"
     */
    public void addExtension(String text, String ext)
    {
        _extensiontext.add(text);
        _extension.add(ext);
    } 
}

Aufruf:

SaveFileDialog fd = new SaveFileDialog();
// add an extension
fd.addExtension("Textfiles (*.txt)", "txt");
// open dialog and get selected file
File f = fd.showDialog(null);